Sai*_*pta 3 java reflection java-8
我在课堂上有以下字段:
private String str = "xyz";
Run Code Online (Sandbox Code Playgroud)
如何仅xyz
使用字段名称获取值,即
我知道字段的名称是str
,然后获取分配的值。就像是:
this.getClass().getDeclaredField("str").getValue();
Run Code Online (Sandbox Code Playgroud)
目前,Reflection API 有field.get(object)
.
Lin*_*ica 12
您可以使用:
String value = (String) this.getClass().getDeclaredField("str").get(this);
Run Code Online (Sandbox Code Playgroud)
或者以更通用和更安全的形式:
Field field = anObject.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
String value = (String) field.get(anObject);
Run Code Online (Sandbox Code Playgroud)
对于您的示例,这应该足够了:
String value = this.str;
Run Code Online (Sandbox Code Playgroud)
但你可能知道那个。
注意: anObject.getClass().getDeclaredField()
可能不安全,因为anObject.getClass()
将返回 的实际类anObject
。看这个例子:
Object anObject = "Some string";
Class<?> clazz = anObject.getClass();
System.out.println(clazz);
Run Code Online (Sandbox Code Playgroud)
将打印:
class java.lang.String
Run Code Online (Sandbox Code Playgroud)
并不是:
class java.lang.Object
Run Code Online (Sandbox Code Playgroud)
因此,为了代码的安全(并避免代码增长时出现令人讨厌的错误),您应该使用尝试从中提取字段的对象的实际类:
Field field = YourObject.class.getDeclaredField(fieldName);
Run Code Online (Sandbox Code Playgroud)