我在课堂上有以下字段:
private String str = "xyz";
如何仅使用字段名称 (即
)获得值xyz
我知道该字段的名称为str
,然后获取分配的值。像这样:
this.getClass().getDeclaredField("str").getValue();
当前Reflection API具有field.get(object)
。
答案 0 :(得分:2)
您可以使用:
String value = (String) this.getClass().getDeclaredField("str").get(this);
或更通用或更安全的形式:
Field field = anObject.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
String value = (String) field.get(anObject);
对于您的示例,这应该足够了:
String value = this.str;
但是您可能知道那个。
注意:anObject.getClass().getDeclaredField()
可能是不安全的,因为anObject.getClass()
将返回anObject
的实际类。参见以下示例:
Object anObject = "Some string";
Class<?> clazz = anObject.getClass();
System.out.println(clazz);
将打印:
class java.lang.String
不是:
class java.lang.Object
因此,为了确保代码安全(并避免代码增长时出现讨厌的错误),您应该使用要从中提取字段的对象的实际类:
Field field = YourObject.class.getDeclaredField(fieldName);
答案 1 :(得分:0)
假设您在变量foo
中有对象。
然后您需要获取Field
Field field = foo.getClass().getDeclaredField("str");
然后允许通过以下方式访问私有字段:
field.setAccessible(true);
您可以通过以下方式获得价值
Object value = field.get(foo);