如何在名称为动态且存储在字符串变量中的类中设置或获取字段?
public class Test {
public String a1;
public String a2;
public Test(String key) {
this.key = 'found'; <--- error
}
}
答案 0 :(得分:38)
你必须使用反射:
Class.getField()
获取Field
参考。如果不公开,则需要拨打Class.getDeclaredField()
而不是AccessibleObject.setAccessible
访问该字段Field.set()
设置值,或使用类似命名的方法之一(如果它是原始值)这是一个处理公共领域的简单案例的例子。如果可能的话,更好的选择是使用属性。
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);
}
}
答案 1 :(得分:1)
DO X=1,Xmax
Do Y=1,Ymax
IF(Array(X,Y)>0)THEN
Array(X,Y)=1
END IF
END DO
END DO
上面的代码就足够了。
Class<?> actualClass=actual.getClass();
Field f=actualClass.getDeclaredField("name");
不幸的是,上面的代码对我来说并不起作用,因为该类有空字段数组。