トップページ⇒tech
17コメント5KB

JavaでProperty

■ このスレッドは過去ログ倉庫に格納されています
0001D使い NGNG
どーしてJavaには「プロパティ」がないんでしょう?
Beansはネーミングルールでプロパティ(もどき)を実装してるらしいですが、
それだとコーディングするときには使えないですよね?
個人的にはDelphiみたいに直接private変数に割り当てることができるのが
いいと思います。

C#で唯一いいと思ったのがプロパティのサポートだったので・・・
言語仕様拡張もまだ間に合うと思うのですが、OO的には美しくないんでしょうか?

勘違いしてたらすんません。
0002Java使い NGNG
すいません。前から思っていたのですが、
Delphi使ったこと無いので”プロパティ”と呼ばれるものが
どんなものなのかわからないっす。どなたか解説お願いします。
0003名無しさん@お腹いっぱい。 NGNG
Windowsで右クリックメニューから(略)。
0004名無しさん@お腹いっぱい。 NGNG
プライベート変数へのアクセスを行っているような関数らしいです。
C#ではset/getって、今月のJavaWorldで立ち読みしました。
0005名無しさん@お腹いっぱい。 NGNG
>4
あららら。
それはC++/Javaでは普通にやってること(当然やらなきゃいけないこと。
サボると後で偉い目にあう可能性ありなこと。)ジャン。
0006>5 NGNG
ただ、getXX@`setXX関数を作るかわりに文法的なサポートがあって
楽だって事。
演算子のオーバーロード同様いわゆるシンタックスシュガーってやつですか?
0007名無しさん@お腹いっぱい。 NGNG
>5
所謂、
a.setHoge(30)
ではなくて、
a.hoge=30;
とかき、実装のほうではset関数の中でprivateにアクセスするらしいですが
もしかしたら、違うことを行っているかもしれません。
00087 NGNG
ちなみに、
int i=(int)a.hoge;
とすると、aのget関数がprivateのhogeをかえすらしいです。
0009名無しさん@お腹いっぱい。 NGNG
らくちんでいいかも
0010名無しさん@お腹いっぱい。 NGNG
楽だぞ。
厳密には(C++Builder使いなのでDelphiの記述はとっさに出てこないが)
int GetInt();
void SetInt();
__property int Int = { read = GetInt@` write = SetInt };
とか書く。
意味は想像付くよね。
0011D使い NGNG
10の補足
ちなみに GetInt() と SetInto() はprivate
0012D使い NGNG
ん? void SetInt(int Value); だな。
0013名無しさん NGNG
property
 1)無理に関数化しなくていい やっぱり関数化した方がいいやとなった時点
   で関数化すればいい。そして変更しても外部のソース変更は不要

 2)実行時型情報とセットになって、いわゆるDelphiのコンポが出来ている
   実行中にプロパティ一覧とかを自分で制御出来るので、上手く利用すると
   結構面白い使い方も出来る(たとえば自作マクロからの制御とか)
0014名無しさん NGNG
Rubyのattrみたいなもんすか?

>attr(name[@` assignable])
>そのモジュールをインクルードするクラスのインスタンスに対して nameという属性とそのアクセスメソッドを
>定義します.
>アクセスメソッドを再定義することで属性の挙動を変更できます.
0015>14 NGNG
nameに値を設定するときのコードは?
PropertyがGoodなのは、クラス書き換えるだけで、
”ただの変数←→Setメソッド”を逝き来出来ること。
設定・・・Obj.PropI := a;
クラス(ただの変数)・・・PropI: integer;
クラス(Setメソッド)・・・Property PropI: integer read SetPropI write F_PropI;
001610 NGNG
いけね、SetIntの引数忘れてたぜ。>>12

完全にinlineで展開するので、propertyに相当する関数は無いんだよね。
15の例だと
this.Prop ;= 10 → this.SetProp(10)
として扱ってくれる。バイナリもそうなっている。
一方
foo := this.Prop → foo := this.F_Prop;
に化ける。
まあこれは表面上はあまり変わってないが、
メンバ関数の実装を1回サボれたぐらいだな。
001715 NGNG
ゴメン。この方が良かったよね。

クラス(ただの変数)・・・Property PropI: integer read F_PropI write F_PropI;
クラス(メソッド張付け)・・・Property PropI: integer read GetPropI write SetPropI;
■ このスレッドは過去ログ倉庫に格納されています