名前が動的で文字列変数に格納されているクラスのフィールドを設定または取得するにはどうすればよいですか?
public class Test {
public String a1;
public String a2;
public Test(String key) {
this.key = 'found'; <--- error
}
}
リフレクションを使用する必要があります:
Class.getField()
を使用して Field
参照を取得します。公開されていない場合は、代わりに Class.getDeclaredField()
を呼び出す必要がありますAccessibleObject.setAccessible
_ を使用して、フィールドがパブリックでない場合にアクセスしますField.set()
を使用します。プリミティブの場合は、類似した名前のメソッドの1つを使用します以下は、パブリックフィールドの単純なケースを扱う例です。可能であれば、プロパティを使用することをお勧めします。
_import Java.lang.reflect.Field;
class DataObject
{
// I don't like public fields; this is *solely*
// to make it easier to demonstrate
public String foo;
}
public class Test
{
public static void main(String[] args)
// Declaring that a method throws Exception is
// likewise usually a bad idea; consider the
// various failure cases carefully
throws Exception
{
Field field = DataObject.class.getField("foo");
DataObject o = new DataObject();
field.set(o, "new value");
System.out.println(o.foo);
}
}
_
Class<?> actualClass=actual.getClass();
Field f=actualClass.getDeclaredField("name");
上記のコードで十分です。
object.class.getField("foo");
残念ながら、クラスには空のフィールド配列があるため、上記のコードは機能しませんでした。