[解決済み] リフレクションによるゲッターの最適な起動方法
質問
私は特定のアノテーションを持つフィールドの値を取得する必要があります。そこでリフレクションを使って、私はこのフィールドオブジェクトを取得することができます。問題は、私はそれが常にゲッターメソッドを持っていることを事前に知っているが、このフィールドは常にプライベートであることです。私はそのゲッターメソッドを呼び出すことを好むが、私は(PermissionManagerがない場合)setAccesible(true)を使用して、その値を得ることができることを知っている。
私は、"get+fieldName"を探すことによってメソッドを探すことができることを知っています(しかし、例えばbooleanフィールドは時々"is+fieldName"として名付けられるのを知っています)。
このゲッターを呼び出すより良い方法があるかどうか疑問に思います(多くのフレームワークは属性にアクセスするためにゲッター/セッターを使用するので、たぶん別の方法で行うのでしょう)。
ありがとうございます。
どのように解決するのですか?
正しい方向性を示してくれるはずです。
import java.beans.*
for (PropertyDescriptor pd : Introspector.getBeanInfo(Foo.class).getPropertyDescriptors()) {
if (pd.getReadMethod() != null && !"class".equals(pd.getName()))
System.out.println(pd.getReadMethod().invoke(foo));
}
BeanInfoまたはPropertyDescriptorインスタンスを自分で、つまりIntrospectorを使わずに作成できることに注意してください。しかし、Introspectorは、通常Good Thing (tm)であるいくつかのキャッシュを内部で行っています。キャッシュがなくてもいいのであれば、さらに
// TODO check for non-existing readMethod
Object value = new PropertyDescriptor("name", Person.class).getReadMethod().invoke(person);
しかし、java.beanのAPIを拡張し簡略化したライブラリはたくさんあります。Commons BeanUtilsはよく知られた例です。そこでは、単純に
Object value = PropertyUtils.getProperty(person, "name");
BeanUtilsには他にも便利なものがあります。例えば、ユーザー入力からプロパティの設定を簡単にするためのオンザフライの値変換(オブジェクトから文字列、文字列からオブジェクト)です。
関連
-
[解決済み] リフレクションを使用して文字列からプロパティ値を取得する
-
JavaMailのメール送信が失敗するケースとその説明の分析
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 4 at text.Division.main(Divisi
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] リフレクションを使って、パッケージ内のすべてのクラスを見つけることができますか?
-
[解決済み】Javaで異なるクラスからプライベートフィールドの値を読み取る方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スレッド "main "での例外をEclipseで解決 java.lang.Error: 未解決のコンパイル問題、コンパイラとパッケージの不整合
-
Java Exceptionが発生しました エラー解決
-
javaで非静的な解を静的な参照にすることができない
-
javaの模造品QQ WeChatのチャットルーム
-
Intellij IDEAのエラー「CreateProcess error=2, system could not find specified file」に対する完璧な解決策です。
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
Eclipse起動エラー:javaは起動したが、終了コード=1を返した(ネット上の様々な落とし穴)
-
このラインで複数のマーカーを解決する方法
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について