
今、setter getter を書いたクラスから、値が set されたものだけを見つけ出し、
get メソッドを呼び出しているのですが、もっとスマートな方法はないでしょうか?
public void getSer( Object object ){
static final String KEY = "goo";
String key = null;
Method[] getMethodList = getGetMethod( object );
for (int i = 0; i < getMethodList.length; i++) {
if( getMethodList[i].getName().startsWith( KEY ))
key = getMethodList[i].invoke(object, null).toString();
}
}
このような場合、getメソッドの数だけ getMethodList の中を
繰り返さないといけないので・・。
ご教授、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
私もちょっと考えてみましたが、結局【値がsetされているかどうか】ということは都度違うわけなので、毎回全てのプロパティ値を精査しなくてはならないのは避けて通れないのではないでしょうか。
もし、リフレクションにおけるコストを懸念されるのであれば、このObjectの基底クラスに定義されたプロパティ値でsetされているもののみを返却するメソッドをabstractで定義し(Interfaceでも可)、実装する、、、みたいな。これだと直接的なので呼び出し時にリフレクションによるコストは削減されると思いますが、実装が必須になるから面倒かな・・・。
もしくは、基底クラスにMapかListを用意して、getter,setterが呼び出された場合必ずそのMapやListに対してプロパティに値がsetされた情報、もしくはremoveされた情報を溜め込むようにして、必要な場合にそのMapかListを返却するようにする。。。これはこれで、getter,setter時にコストがかかりますが。。。
ただ、私も実装するのであれば、takuya_mさんのような実装になりそうな気がしますが・・・。
有効な回答でなくて申し訳ありません・・・。
回答ありがとうございます。
自分も、何度も何度も考えたのですが、braver_2004さんの回答通りです・・。
もう少し考えたいと思います・・
今回は、本当にありがとうございます・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコード件数の表示
-
C言語での文字列より値を抜き出す
-
Javaの関数名が長い?
-
なぜprotected overrideなのか
-
Java初級 引数に適用できません
-
String.containsの反対機能はあ...
-
メソッド宣言の戻り値の型にク...
-
StringBufferからStringへキャ...
-
VB.Net: クラスの共有メソッド...
-
C# 点の描き方をおしえてくだ...
-
Pythonのクラスへの引数の渡し...
-
JAVAで放物線を描く
-
Cの関数内ローカルstatic変数
-
Java初心者です、エラーの意味...
-
Java フィールド
-
匿名クラス内のメソッドをオー...
-
親の親のメソッドを呼ぶには?
-
abstract と static を一緒に付...
-
別クラスのmainメソッドの実行
-
javaのAPIの読み方がわかりません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコード件数の表示
-
Java初級 引数に適用できません
-
String.containsの反対機能はあ...
-
別クラスのmainメソッドの実行
-
abstract と static を一緒に付...
-
StringBufferからStringへキャ...
-
説明文書でのメソッド・変数の...
-
Java初心者です、エラーの意味...
-
YYYYMMDD書式の日付に対する適...
-
コマンドライン引数のチェック
-
Google Apps Script で getRang...
-
staticのメリット、デメリット
-
メソッドの引数に指定されてい...
-
スーパークラスからサブクラス...
-
return new使用時
-
メソッド宣言の戻り値の型にク...
-
インターフェースについて
-
CSVから読み込んだデータの保持...
-
問題の意味が分かりません
-
JavaからCへ
おすすめ情報