Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java反射中获取字段值_Java_Reflection_Java 8 - Fatal编程技术网

如何在Java反射中获取字段值

如何在Java反射中获取字段值,java,reflection,java-8,Java,Reflection,Java 8,我在一个类中有以下字段: private String str = "xyz"; 如何仅使用字段名获取值xyz,即 我知道字段的名称是str,然后得到指定的值。比如: this.getClass().getDeclaredField("str").getValue(); 当前反射API具有字段。获取(对象)您可以使用: String value = (String) this.getClass().getDeclaredField("str").get(this); 或者以更普遍、更安全的

我在一个类中有以下字段:

private String str = "xyz";
如何仅使用字段名获取值
xyz
,即

我知道字段的名称是
str
,然后得到指定的值。比如:

this.getClass().getDeclaredField("str").getValue();
当前反射API具有
字段。获取(对象)
您可以使用:

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.Object
因此,为了代码的安全(以及避免代码增长时出现严重错误),您应该使用试图从中提取字段的对象的实际类:

Field field = YourObject.class.getDeclaredField(fieldName);

假设您在变量
foo
中有一个对象

然后您需要获得
字段

Field field = foo.getClass().getDeclaredField("str");
然后通过以下方式允许访问专用字段:

field.setAccessible(true);
您可以通过以下方式实现价值:

Object value = field.get(foo);

如果你这样做只是为了好玩,那就继续吧,但是使用反射通常意味着(除非你在图书馆工作)一些XY问题——答案已经发布了……:|@Eugene它已被编辑。您不应将
getClass()
getDeclaredField
一起使用,因为当存在子类时,这将中断。使用实际类的
nameofActualClass.class
形式的类文字。@Holger你说得对,我已经编辑了我的文章并做了一些解释。
Object value = field.get(foo);