2

次のクラスがあるとします。

class Foo
{
   public String bar;
   public String baz;
}

そして、別のクラスに次のコードがあります。

Foo foo = new Foo();
String[] properties = {"bar", "baz"};
String[] values = {"barValue", "bazValue"};

properties配列を反復処理し、それを使用して値を設定することは可能Fooですか? 例:

for (int i = 0; i < properties.length; i++)
{
  foo[ properties[i] ] = values[i];
}

上記のようなことは可能ですか?

4

2 に答える 2

1

を使用できますIntrospection。これは、Java Beans に直面する場合にはるかに優れた方法です。

短所は次のとおりです。

  • getter/setter が存在する場合はそれらを呼び出し、getter/setter がなくフィールドが public である場合はフィールドに直接アクセスします。
  • の配列が得られるため、プロパティを反復処理できますPropertyDescriptor
  • BeanInfo クラスをサポートし、
    • Beanのプロパティを構成できるように
    • 異なる命名規則でアクセサー/ミューテーターを定義します (ゲッターまたはセッターではありません)。
  • Apache Commons BeanUtilsや などのライブラリを使用できますSpring BeanWrapper API

詳細については、java.beans.Introspectorjavadocs を参照してください。

ちなみに、私が知る限り、Interospection はリフレクションに基づいて構築されているため、リフレクション自体を使用しています。

于 2013-10-13T05:38:43.463 に答える