[mustang/Java SE 6] 次世代Javaの動向 4 [dolphin]
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/20(月) 10:38:16[mustang] 次世代Javaの動向 3 [dolphin]
http://pc8.2ch.net/test/read.cgi/tech/1157227790/
次世代Javaの動向 2
http://pc8.2ch.net/test/read.cgi/tech/1147881822/
【Java】次世代Java・J2SE1.6の動向【Mustang】
http://pc8.2ch.net/test/read.cgi/tech/1081698555/
2006年12月にMustang Java SE 6がリリース予定
Mustangの掲げる主な目標は以下の点にある。
* 互換性と安定性および品質の向上
* Easy of Developmentの実現
* WebサービスおよびXMLサポート機能の拡張
* リソース管理や診断機能の強化
* デスクトップ環境の強化
Java SE 6 じゃじゃ馬ならし
http://www.javainthebox.net/laboratory/JavaSE6/
0653デフォルトの名無しさん
2007/03/14(水) 23:25:14孔明あらわる
0654デフォルトの名無しさん
2007/03/14(水) 23:56:34俺もそんな気がしたんだけど、>>650 だそうです。
0655デフォルトの名無しさん
2007/03/14(水) 23:57:200656デフォルトの名無しさん
2007/03/15(木) 00:00:240657デフォルトの名無しさん
2007/03/15(木) 00:45:46↑これらも
つか==なしとか縛りきつくね?
0658デフォルトの名無しさん
2007/03/15(木) 00:47:52FlashのActionScript(ECMAScript派生)もread onlyプロパティがあったが、dotだね。
dot以外を選択するのは、正直コンパイラ屋の都合でしかないと感じる。
メンバ変数に@PropertyFieldアノテーションを施す程度で妥協して欲しい。
0659デフォルトの名無しさん
2007/03/15(木) 01:30:430660デフォルトの名無しさん
2007/03/15(木) 01:32:162chらしい模範解答だなw
0661デフォルトの名無しさん
2007/03/15(木) 01:52:21そんな構文糖は要らないってのも意見として尊重してほすぃ。
0662デフォルトの名無しさん
2007/03/15(木) 02:15:35どうなんだろ、セマンティクスがハッキリするから
getter,setterが分かりやすくなるという点ではIDEも歓迎なのでは?
実現方法はともかく。
0663デフォルトの名無しさん
2007/03/15(木) 04:06:26コードの読みやすさが上がるのであれば、新しい構文糖の導入も大いに結構じゃないかい?
0664デフォルトの名無しさん
2007/03/15(木) 07:43:28あきれる。
> 仮に追加しても何の影響もない。
そんなは事ない。
0665デフォルトの名無しさん
2007/03/15(木) 07:47:20>仮に追加しても何の影響もない。
追加したら、java.beans.DesignTime を実装している既存のクラスを書き換えなきゃいけなくなるだろう。
影響がないって、馬鹿じゃないのか?
0666デフォルトの名無しさん
2007/03/15(木) 07:48:08× java.beans.DesignTime
○ java.beans.DesignMode
0667デフォルトの名無しさん
2007/03/15(木) 08:18:45http://java.net/pub/pq/142 とか見ると、
property構文は、XML構文に次いで人気がないんだよね。
http://java.net/pub/pq/141 とかだと、
very important と、somewhat important をあわせても 1/4 ぐらいだったりする。
まぁ、この手の投票がちゃんと機能してるかはわからんし、
構文糖なら要らないってのと、重要度が低いってのは同じ意見じゃないんだけど。
0668デフォルトの名無しさん
2007/03/15(木) 08:34:05> VBのプロパティとかdotだし、コード上で分かりにくいってことはなかった。
もし問題がないなら dot を使うのに反対の人はあんまし居ないと思うんだが。
同じクラスでフィールドと同名のプロパティが持てる言語を出してきて
わかりにくくないって言うんならともかく。
> メンバ変数に@PropertyFieldアノテーションを施す程度で妥協して欲しい。
それって、何か改善する?
0669デフォルトの名無しさん
2007/03/15(木) 09:09:07> 同じクラスでフィールドと同名のプロパティが持てる言語を出してきて
> わかりにくくないって言うんならともかく。
それなら、同名のフィールドとプロパティが共存できて、
さらにフィールドもプロパティも dot でアクセスする言語がわかりにくくないって言わないと。
(dotじゃなくても良いけど同じ記号でアクセスする言語)
0670デフォルトの名無しさん
2007/03/15(木) 09:17:17> その例でinterfaceの方にisDesignTime()を
> 追加するという仮定自体がそもそもありえないし
……。 isDesignTime() は元からあるメソッドですが。
0672デフォルトの名無しさん
2007/03/15(木) 10:26:26質問になってない。
0674デフォルトの名無しさん
2007/03/15(木) 10:36:21それだけじゃ解決しないね。
新プロパティ(dotでアクセス)と同名のフィールドが作れるなら
setter/getterのプロパティと同じ問題が起こるし、
C#みたく新プロパティと同名のフィールドが作れなくするなら、
標準APIが新プロパティを追加したらユーザコードの書き換えが必要になる可能性がある。
これ以降は >>640 >>641 と同じ路線だな。
上記の書き換えを最小限に抑えようとすれば、
標準APIは極力 新プロパティを追加しない方向になるだろうから、
新プロパティの構文は言語仕様に定義されたが、
標準APIで 新プロパティが使えない、という本末転倒な事態が予測される。
つまり、使い勝手が悪い。
0675デフォルトの名無しさん
2007/03/15(木) 10:39:07標準APIが新プロパティを追加したら、
そのclass/interfaceを継承/実装して同名のフィールドを使っていたユーザコードの書き換えが必要になる。
0676649
2007/03/15(木) 10:42:440677デフォルトの名無しさん
2007/03/15(木) 11:02:59まぁ、interface に「新プロパティ」を追加したら、
どっちみち そのinterface を実装しているクラスの書き換えが必要になる。
既存のコードは setter/getter は実装してても、
「新プロパティ」まで実装してて書き換えの必要がないってのは考えにくいから。
この書き換えを最小限に抑えようとすれば、
標準API は、極力 abstract な新プロパティを追加しない方向になるだろうから
以下、>>674 と同文、と。
0678デフォルトの名無しさん
2007/03/15(木) 11:15:13標準API は、既存の setter/getter を置き換えるものも含めて、
極力 abstract な新プロパティを追加しない方向になるだろうから
うーむ。既存の setter/getter は互換性のために残す事を想定してるから
置き換える、じゃないんな。まぁ、setter/getter を残しても残さなくても、
標準API に abstract な新プロパティを追加すれば同じだけど。
0679デフォルトの名無しさん
2007/03/15(木) 20:13:04OSを選ばないUDIライブラリとか、BGM周りはネイティブにディスパッチとかね。
標準であるかどうかってのがここらへんは大きい。
0680デフォルトの名無しさん
2007/03/15(木) 22:34:050681デフォルトの名無しさん
2007/03/15(木) 23:05:33って10年前からいわれてるが
あとはJOGLも標準ではいってくれるといいのだが
今はプラットフォームごとに用意してあげないといかんからWindows以外はめんどくさい
本当は新世代専用GCコールもほしい
タイミングコントロールできて殿堂入りしないやつならアクション系もバリバリ使える
0682デフォルトの名無しさん
2007/03/16(金) 00:05:01interfaceに追加したらそれを実装するクラスに影響があるのは、
「プロパティ」に限らず抽象メソッドでも同じだわな。
既存のinterfaceに「抽象メソッド」を追加したら他のクラスに影響が出る
↓
だから標準APIに「抽象メソッド」は追加できない
↓
「抽象メソッド」は標準APIに使えないから無意味
あほか。
0683デフォルトの名無しさん
2007/03/16(金) 00:22:54> 既存のinterfaceに「抽象メソッド」を追加したら他のクラスに影響が出る
普通は、既存の interface に抽象メソッド追加するのは慎重にする。
逆に、 今までにない interface を作る時は自由に抽象メソッドを定義できる。
> 「抽象メソッド」は標準APIに使えないから無意味
安易に追加できないが、「使えない」とか「無意味」とはならない。
abstract な新プロパティも、抽象メソッドと同じで、
今までにない interface を作る場合は自由に定義できるだろうけど、
既存の interface に追加する場合は慎重にならざるを得ないだろう。
既存の interface 経由で使えない事が予想される新プロパティは
「使えない」とか「使い勝手が悪い」と言える。
0684デフォルトの名無しさん
2007/03/16(金) 00:26:00△既存の interface -> ○標準APIの既存の interface
0685デフォルトの名無しさん
2007/03/16(金) 01:10:18古い実装のを呼ぼうとするとErrorでも出るかな
0686デフォルトの名無しさん
2007/03/16(金) 01:11:37既存のinterfaceを安易に拡張できないってのは当然だね。
>既存の interface 経由で使えない事が予想される新プロパティは
なんで新プロパティに限って既存のinterface経由で使われることを
期待されなければならないんだろう?
0687デフォルトの名無しさん
2007/03/16(金) 01:16:08> だから標準APIに「抽象メソッド」は追加できない
> ↓
> 「抽象メソッド」は標準APIに使えないから無意味
ここで飛躍してる。基本的には「追加できない」==「使えない」とはならない。
で、setter/getter とは無関係な新プロパティシステムを導入したとして、
その新プロパティを、標準APIの既存の interface で使いたいと言う場合は
・新プロパティを追加すれば、その interface を実装していたコードを変更する必要が出る。
・逆に新プロパティを追加しなければ、標準APIの既存の interface では新プロパティは使えない
で、俺は標準APIの管理者は後者を選択すると予想するので、
その場合は新プロパティは「標準APIの既存の interface経由では使えない」ので
使えないとか、使い勝手が悪いと言えるだろう。
仮に前者を選んだとしても、コードの変更を迫られるので無問題とはならない。
0688デフォルトの名無しさん
2007/03/16(金) 01:23:35> なんで新プロパティに限って既存のinterface経由で使われることを
> 期待されなければならないんだろう?
限って? 他では期待されてないんだっけか?
0689デフォルトの名無しさん
2007/03/16(金) 01:27:18限ってないよな。Closure だって、Closure Conversion とかで
abstract なメソッドが一つだけの既存の interface に変換する事を考えてたりするし。
0690デフォルトの名無しさん
2007/03/16(金) 01:48:55たいてい inteface と関係ないか、既存の interface との協調にも配慮してあるよーな。
0691デフォルトの名無しさん
2007/03/16(金) 05:18:23新世代・・・・ああああNewGeneration用のGCってことか。
いや、殿堂入りが無いというより、tenureの32をいじれるようになった方がいいかな。
ある程度、コア数が増えて並行処理が速くなると、OldGenerationを少なくして
Newgenerationのtenureを32回より多くして、NewGenerationで運用したほうが
効率いいと思うんよねぇ。
昔、24CPUのマシン使った時、10GB程度のNewGenerationをParNewGCかけてたけど
確か0.5s程、ホンの一瞬だった。
0692デフォルトの名無しさん
2007/03/16(金) 07:42:00class定義に影響する新機能としては例えばfunction-typeなんかがあるけど、
じゃあこれは既存のinterfaceに追加されて使われることを期待されてるの?
0693デフォルトの名無しさん
2007/03/16(金) 08:53:05対抗馬である setter/getter の syntax sugar なプロパティなら
既存の interface経由で使えるしな。
それと比較しても 「使い勝手が悪い」といえるだろうね。
0694デフォルトの名無しさん
2007/03/16(金) 08:53:44具体的に、どんな問題が出るんだ?
0695デフォルトの名無しさん
2007/03/16(金) 12:35:00並列GCはデフォの状態よりスループットはいいけどレスポンスが大幅に悪化するぞ
あとGC稼動のタイミングをコントロールできる10msのGCとコントロールできない0.1msのGCだと前者のほうがいいわけで
0696デフォルトの名無しさん
2007/03/16(金) 13:50:53今のマシンスペックならGCに0.1msもかからんよ。
ゲームならヒープサイズとスタックサイズの調整で2Dまでならストレスなく遊べる。
やっぱメモリ食いは収まらないけど。
取り合えずただのデスクトップツールとしては実用的じゃない?
ジョイパッド拾えるようになると同じ方向性で障害者用の入力補助装置の入力拾えそうでアクセシビリティ周りが格段に良くなって良いと思うけどな。
0697デフォルトの名無しさん
2007/03/16(金) 14:15:04GCの時間はヒープサイズに綺麗に比例するのでなんともいえないよ
最近のマシン持っているけど0.5msきることは実際にゲームつくっていてまずない
新世代領域を少なくしてやっと0.2mくらいか
インクリメンタルGC(現在の実装は並列GC)だとレスポンス悪化してるし、
デフォのGCだとFullGCがいつかは必ず起きるし、おきたら使い物にならない
そもそもJava2DやJOGLなどライブラリによるGCはコントロールできなから
自分のコードでの調整は何も意味がない
0.1mが0.05mであっても同じこと
リアルタイム性ってのは早いかどうかじゃなく、コントロールできること、把握できることだから
0698デフォルトの名無しさん
2007/03/16(金) 15:41:40まるでApache Antの記法だな
0699デフォルトの名無しさん
2007/03/16(金) 15:42:31四項演算子か。
Checkstyleプラグインが警告しそうだな
0700デフォルトの名無しさん
2007/03/16(金) 19:54:46既存のinterfaceに public int getHoge(); なんて追加したら
おんなじように「問題」は発生するが?
>>694
何の問題も出ないだろう。既存のinterfaceに追加したりしなけりゃ。
0701デフォルトの名無しさん
2007/03/16(金) 20:14:48setter/getter の syntax sugar なプロパティであれば、
既存の interface で、既に宣言されている setter/getter で
プロパティにアクセスする分には問題は発生しない。
setter/getter と関係のない新プロパティシステムを導入した場合、
既存の interface で、既に宣言されている setter/getter ではプロパティにアクセスできない。
で、標準API みたいに変更すると影響範囲が大きい既存の interface は安易に変更できないから
新プロパティを追加したくても既存の interface には追加できず、
既存の interface からは、この新プロパティは使用できない可能性が高い。
故に setter/getter の syntax sugar よりも 「使い勝手が悪い」といえる。
0702デフォルトの名無しさん
2007/03/16(金) 21:11:410703デフォルトの名無しさん
2007/03/16(金) 21:19:010704デフォルトの名無しさん
2007/03/16(金) 22:07:53>既存の interface で、既に宣言されている setter/getter ではプロパティにアクセスできない。
既存の「getter/setter」と関係ないプロパティが前提なら、当然既存のinterfaceにも
存在しているわけがないだろう。ここでアクセスしようとしている「プロパティ」ってのは
何のことを言っているんだ?
もし「getter/setter」のことならば、それはプロパティとは関係のない単なるメソッドだから、
普通にメソッドとしてアクセスすればよい。
もし新たにプロパティを追加することを想定しているのならば、それはインターフェースの
拡張に他ならないから、他に影響が出るのは当然。それは別にプロパティに限らない。
0705デフォルトの名無しさん
2007/03/16(金) 22:18:48> ここでアクセスしようとしている「プロパティ」ってのは
当然、setter/getter と関係ない新プロパティシステムのプロパティ。
で、プロパティの持つものは、既存の setter/getter で表わされるのと同じもの。
プロパティ導入の大きな動機の一つに、setter/getter を宣言するのも、
呼び出すのも冗長だという不満を解消するというものがある。
setter/gettter とは別の新プロパティシステムを使えば、
既存の interface にある、既存の JavaBeans のプロパティに対して、
setter/getter を呼び出すのが冗長だという不満を解消できない。
仮に Tiger で追加された Generics が、もし仮に既存の Collection API と協調できず、
List でも Map でもパラメタ型を取れなければ、使い勝手が悪いと評価されるだろう。
それと同じ。
0706デフォルトの名無しさん
2007/03/16(金) 23:00:03foo.getBar()がfoo->barになっただけでどんな不満が解消するんだよ。
0707デフォルトの名無しさん
2007/03/16(金) 23:07:260708デフォルトの名無しさん
2007/03/16(金) 23:08:42なら、なんでプロパティが必要なんだ?
それに、最初出てきた案は setter/getter の syntax sugar なんだぜ?
0709デフォルトの名無しさん
2007/03/16(金) 23:18:32わかってもらえない場合は、別の角度からの説明を試みるべきだと思う。
>>706
だよな。いらねーよな、こんなプロパティもどき。初心者が混乱するだけ。
0710デフォルトの名無しさん
2007/03/16(金) 23:22:40普通は説明されなくてもわかるだろ。あんなの。
気づかない方が頭がおかしいんだよ。
0711デフォルトの名無しさん
2007/03/16(金) 23:35:01「普通」とか言うけど、「使い勝手が悪い」っていう結論は主観が入り込んでるだろ?
0712デフォルトの名無しさん
2007/03/17(土) 00:10:420713デフォルトの名無しさん
2007/03/17(土) 00:25:29>>621 で
> いまのキモいJavaBeansのgetter/setterはプロパティとはなんの
> 関係もないことにすりゃ、それで解決する
という意見が出た。
新プロパティシステムを作れば、フィールドと同名のプロパティを禁止できるからって話なんだろうけど、
>>674 のような問題も予想されるため、完全な解決とはならない。
結局、限定名のルールとかフィールドアクセスのルールが
ぎちぎちに詰め込まれているので dot でフィールドにアクセスする事と、
dot でプロパティにアクセスする事が相容れないと考えた方が良いみたい。
それとは別に、>>640、>>641 で言ったように setter/getter とは別の新プロパティシステムを導入する場合、
setter/getter の syntax sugar ならプロパティとしてアクセスできた情報の一部に
プロパティシステムを使ってアクセスできない事が予想される。
結局、「setter/getter とは別の新プロパティシステム」を導入しても
setter/getter のsyntax sugar で問題とされた事を解決できず、
さらに setter/getter の syntax sugar では出なかった問題も発生する。
まぁ、「setter/getter とは別の新プロパティシステム」の詳細を見ての評価じゃないけど
現在の情報からなら setter/getter の syntax sugar より「使い勝手が悪い」と言える。
0714デフォルトの名無しさん
2007/03/17(土) 00:28:20どうでもいーけど長文ウザイ
0715デフォルトの名無しさん
2007/03/17(土) 10:20:140716デフォルトの名無しさん
2007/03/17(土) 10:22:41どんな影響が出るかを予見できないってのは技術者として拙いだろ。
0717デフォルトの名無しさん
2007/03/17(土) 10:30:57なんで一生懸命説明してんの?
0718デフォルトの名無しさん
2007/03/17(土) 10:33:03次世代Javaと関係ない話題だな。 続きは他所行ってやれ。
0719デフォルトの名無しさん
2007/03/17(土) 12:59:19たった2レス程度で…気が短いな
0720デフォルトの名無しさん
2007/03/17(土) 16:16:28結局、getHoge()/setHoge()を使わない新プロパティシステムを導入しても、
既存のgetHoge()/setHoge()を使えないから使い勝手が悪いということかw
0721デフォルトの名無しさん
2007/03/19(月) 00:14:19プロパティは既存の言語機能と干渉するから、導入の必要はないというもの。
それ、ほんとなのかなあ(ry
0722デフォルトの名無しさん
2007/03/19(月) 00:44:26当然のことだよね
0723デフォルトの名無しさん
2007/03/19(月) 00:51:13既存の言語機能と干渉とかいう以前に、そもそも「そんなに必要な物なのか」って
ことがまずあるんじゃないか?
プロパティの仕組み導入の話が出てるのは、
「定義するのも使うのも既存のgetter/setterの仕組みだとめんどくさい」
という要望から来てるんだろうけど、
「めんどくさい」っていう理由だけで言語仕様変えてったらとんでもないことになる気がする。
相当面倒、ってのが、すごく簡単ってなるならまだ納得できなくもないけど、
IDE使ってる人の中にはgetter/setterがそこまで面倒とは思わない人もいるんじゃないかとも思う
ちなみに個人的にはgetter/setterの使用側は今のままで十分。
ただ、定義するのが面倒だから、アノテーションとかで自動でデフォルトのgetter/setterが
作成される仕組みができるぐらいでも満足だよ。
0724デフォルトの名無しさん
2007/03/19(月) 02:14:53obj set foo = 1;
0725デフォルトの名無しさん
2007/03/19(月) 08:54:34>>667 の結果を見るに、
プロパティ要らないって意見の方が サイレントマジョリティで、
プロパティ欲しいと言ってる方が、声の大きい少数派。
0726デフォルトの名無しさん
2007/03/19(月) 11:47:220727デフォルトの名無しさん
2007/03/19(月) 12:23:090729デフォルトの名無しさん
2007/03/19(月) 23:15:19うむ。
プロパティ自体は特にそんなに欲しいものでもないが、自分で開発していて
コードの半分以上が意味のないgetter/setterで占められているクラスが
山のようにあるのを見ると、何かが間違ってる気がしてならない.。
0730デフォルトの名無しさん
2007/03/19(月) 23:21:52同様にBigDecimalの演算もきっつい
0731デフォルトの名無しさん
2007/03/20(火) 00:51:51プロパティに足し算して格納とかってそんなに使う?
俺、WEB開発系がメインだけど、プロパティに対して加算とかって
ほとんどしたことないし、BigDecimalも使ったことない。
きっとプロパティが必要な分野と、たいして必要とされない分野があるんだろうな。
0732デフォルトの名無しさん
2007/03/20(火) 01:17:10やっぱりadd()がめんどくさいから演算子オーバーロード使わせろ
とか言うのかな。
0733デフォルトの名無しさん
2007/03/20(火) 02:00:33BigDecimalだけはStringのようにシンタックスシュガーとしてaddとかやってほしいな
プロパティの足し算引き算ってのは普通にあるっしょ
金額とか在庫とかいくらでも
特にO/RマッパやBeanBinding関係使うと頻発
0734しろうと
2007/03/20(火) 09:36:43public int bar;
}
じゃだめなん?
0735デフォルトの名無しさん
2007/03/20(火) 10:15:22それに定義のほうはどうにでもなるためたぶん問題になってない
0736デフォルトの名無しさん
2007/03/20(火) 22:24:230737デフォルトの名無しさん
2007/03/20(火) 22:34:180738デフォルトの名無しさん
2007/03/20(火) 22:38:44グリッドとかは、アプリケーションの下で何らかのグリッド制御部が
動いていて、JVMのリソースとしてグリッドが見えるって前提だろうから
MVMが実現して、アプリケーションの起動とJVMの起動が分離するまでは
あんまり興味がないね。
0739デフォルトの名無しさん
2007/03/20(火) 23:23:42BEAだかが仮想化技術として構想を発表してたはず
0740デフォルトの名無しさん
2007/03/20(火) 23:27:12グリッドが見えるのを前提にする必要はないでしょう。
HotSpotが全自動で動的最適化を行うように
グリッド制御部が全自動でスレッド分散を行うのが
あるべき姿だと思います。
0741デフォルトの名無しさん
2007/03/24(土) 22:20:18http://download.java.net/jdk7/changes/jdk7-b10.html
http://download.java.net/jdk7/binaries/
NewFeatureは地味なパフォーマンス向上と
getAsText,setAsTextか。これはちょっと嬉しいな。
0742デフォルトの名無しさん
2007/03/25(日) 05:37:51を生成することになることが重要。
PGがthreadを手書きしてでしか対応できないというのではコストがかかりすぎる。
0743デフォルトの名無しさん
2007/03/26(月) 13:15:00やっぱ、何か明示的にプロパティを示す構文がほしい。
と思ったのは、eclipseでリファクタリングするとき。
getter側をリネームしたら、setter側も変わってほしいし、名前の定数も変わってほしい。
public static final string PROPNAME_XXX = "XXX";
public Object getXXX() { ... }
public void setXXX() { ... }
の三者の一貫性を、自動的に保ちたい。
なんか、アノテーションつけとくと、eclipseが、それをヒントに一括リネームしてくれる
だけでもいいんだけど。
0744デフォルトの名無しさん
2007/03/26(月) 14:16:160745デフォルトの名無しさん
2007/03/26(月) 14:25:33getter/setter はまだしも、
> public static final string PROPNAME_XXX = "XXX";
の必要性が良く分からん。
0746デフォルトの名無しさん
2007/03/26(月) 14:42:25名前だけで型がないし、そもそも型が要らないならenumでいいし
まさか、文字列の中身がクラス名とか
0747デフォルトの名無しさん
2007/03/26(月) 15:40:52>>746
プロパティ名を変えるときに、プロパティ名の文字列リテラルがソース中に散らばってると、
修正がめんどくさいから。
IDEの完全一致文字列リテラルの置換でできなくはないけど、"item"、"count"なんてプロパティ名
だと、無関係な文字列に誤爆するかもしれん。
0748デフォルトの名無しさん
2007/03/26(月) 17:01:43>修正がめんどくさいから。
得てしてこういう理由で出てくるワークアラウンドは
引きずらない方がいい悪習慣である可能性が高い
0749デフォルトの名無しさん
2007/03/26(月) 18:19:33いや、一つの識別子をソース中に書くのは1回で、あとは参照に置き換えるってのは、
コードのメンテナンス性を保つ上で、ものすごく基本的なことだと思うが。
getXXX, setXXXというメソッド名は、XXXというプロパティ名に従属する識別子なんだから、
ソース中の1箇所の変更で、全てが整合性を保った状態で変更されるのが理想。
C#では、それを文法で強制している。javaでは、整合性の保持はプログラマ任せ。
プロパティ名変更する度に、getXXX、setXXX、firePropertyChangeの引数、全て変更って、
バカバカし過ぎる。せめて、IDEに面倒みてもらいたい。
YYYListener、addYYYListener、removeYYYListenerも、相互に関連する名前なんだから、
ソース1箇所の変更で全てが修正される方が望ましい。
これも、C#ではeventで実現できるが、javaはプログラマ任せ。
javaは保たれるべき一貫性の保持を、文法で強制するんじゃなくて、守るべき
ルールとして与えてるだけなんで、そのルールが守られることのチェックを、アノテーションでできてほしい。
addYYYListenerにしても、
@AddListenerMethodFor(YYYListener.class)
void addYYYListener(YYYListener listener) {}
みたいにして、名前の整合性がなかったら、コンパイラで検出できるようにすべきだと思う。
IDEではYYYListenerをリファクタリングでリネームしたら、addもremoveもリネームできて、ほしい。
javaは、識別子の命名ルール関係で、コンパイラでは検出できないけど、
守られていないと正しく動作しない決め事が結構ある。
そのあたり、アノテーションでバンバン検出できるようになると良いんだけど。
0750デフォルトの名無しさん
2007/03/26(月) 19:16:31そのプロパティを実際に使用している箇所の変更は不要なの?
0751デフォルトの名無しさん
2007/03/26(月) 19:26:01public int MyProperty {
get { return myVar; }
set { myVar = value; }
}
0752デフォルトの名無しさん
2007/03/26(月) 21:00:03> getXXX, setXXXというメソッド名は、XXXというプロパティ名に従属する識別子なんだから、
これも別の概念なんだよね。BeanInfo や PropertyDescriptor を自分で書いてる人は
hoge って名前のプロパティで、void hoge(Object) を setter に、Object hoge() を getter に指定する事も出来るし。
もっとも、真面目に BeanInfo 見てないフレームワークだとプロパティと認識してくれないかもしれんけど。
> バカバカし過ぎる。せめて、IDEに面倒みてもらいたい。
ここは同意なんだけど、IDEで吸収するのか、言語/コンパイラで吸収するのかってのもあるし。
とりあえず、現状だと言語/コンパイラのレベルで BeanInfo 扱うのは面倒っぽい。
例えば、今コンパイルしようとしてる Hoge.java の BeanInfo を扱うのが面倒。
PropertyDescriptor の getWriteMethod とか getReadMethod とかで、
まだコンパイルされてない Hoge.class の java.lang.reflect.Method 取るっても取れないだろうし。
これがないと、プロパティ名を getter/setter に変換できないし。
■ このスレッドは過去ログ倉庫に格納されています