1

私は振り返りにそれほど強くはなかったし、些細なことのように思えるがそのようにはならなかった問題に困惑したようだ。少なくとも私にとっては。ゲッターがいくつかあるBeanがあり、サービスでReflextionを使用して上記のメソッドをループし、ある時点で必要なgetメソッドを取得します。メソッドを呼び出して値を取得しましたが、値を取得したフィールドの名前を知りたいと思います。行き詰まるところがあります。

getメソッド

public String getTest(){ return test }

リフレクションによる呼び出し方法

Object value = method.invoke(jsonObject, new Object[]{});

今、私はこのようなことをするのが好きです

String fieldName = method.findTheNameOfTheField();

フィールド名からゲッターを呼び出す例はたくさんありますが、その逆の方法については何もありません。これは、メソッドの名前を解析せずに、メソッドから取得するだけで可能ですか?

4

4 に答える 4

3

メソッドを呼び出して値を取得しましたが、値を取得したフィールドの名前を知りたいと思います。

いいえ、これを行うことはできません。少なくとも、バイトコード自体を分析する必要があります。ゲッターには任意のコードを含めることができることを忘れないでください。多分それはフィールドを使用しません。多分それは複数のフィールドを使用します。たぶん、すべてのプロパティがマップを使用しています。たぶんそれはフィールドを使用しますが、それから結果を変更します(例えばリストをコピーします)。

そもそも、デザインを変更することでこれが不要になるかどうかを検討する必要があります。それが良いアイデアになるケースは多くありません。

于 2012-08-10T09:47:01.807 に答える
1

JavaBeans を操作する場合、Bean Introspectorを使用すると作業が簡単になります。

チュートリアル

http://v1.dione.zcu.cz/java/docs/tutorial/javabeans/introspection/index.html

http://www.java2s.com/Code/Java/Development-Class/IntrospectingaBean.htm

http://www.znetdevelopment.com/blogs/2012/04/11/java-bean-introspector-and-covariantgeneric-returns/

http://www.javablogging.com/inspecting-your-java-beans/

http://softwaresalariman.blogspot.co.uk/2011/11/minimal-javabean-introspection-example.html

これは反射を使用しますが、次のような詳細の多くを隠します。私はゲッターが欲しいですgetValueか、それともisFlagゲッターのためですか。

于 2012-08-10T09:54:32.243 に答える
1

ここでできる唯一のことは、JavaBean 規則に依存することです。つまり、メソッドgetFoo()はフィールドの値を返しますfoo

于 2012-08-10T12:09:28.120 に答える
0

ゲッターは必ずしもフィールドを返す必要はありません。これは本当に些細な例です

public getAge() {
  return currentdate - birthdate;
}

ゲッターの要点は、フィールドを返す可能性があることですが、メソッドを呼び出す人から内部ロジックを抽象化して、他の何かを返す可能性もあります。

于 2012-08-10T15:11:44.100 に答える