如何从其他 java class 检索字段值?
How do I retrieved field value from other java class?
Class<?> c = Class.forName("other");
Field[] field = c.getDeclaredFields();
System.out.println("name of field: "+fieldA[0].getName());
我可以从其他 .java
文件中检索字段名称,但不能检索值。
示例:
<other.java file> public int namefield = 5;
从我的 main.java
执行文件
我想检索字段名称和值。
display: name of field: namefield value: 5
阅读java.lang.reflect.Field
的javadoc。在那里你可以看到方法 getInt()
您必须调用 field.getInt(object)
,其中对象是 class other
的一个实例
您无法检索字段值,因为(非静态)字段的值是对象的 属性,而您只是通过反射访问它的 class。
要获取字段的值,您首先需要 class other
的对象 anObject
然后您可以调用
field.getInt(anObject);
获取其name字段值。
假设您要检查的 class 是:
public class ClassA {
private String someString = "foo";
public String anotherString = "bar";
}
ClassA.class.getDeclaredFields()
的调用将return 一个包含两个元素的数组,但由于其中一个字段是私有的,因此无法直接访问。为了能够,您必须首先使其可访问:
ClassA objectOfTypeClassA = ...
for (Field f : objectOfTypeClassA.getClass().getDeclaredFields()) {
f.setAccessible(true);
System.out.println("Value of "+f.getName()+" in class "+ClassA.class.getName()+" is "+f.get(objectOfTypeClassA));
}
要检索非静态字段的值,您需要传递定义字段值的对象实例。
Class<?> c = Class.forName("other");
Field[] field = c.getDeclaredFields();
System.out.println("name of field: "+fieldA[0].getName());
我可以从其他 .java
文件中检索字段名称,但不能检索值。
示例:
<other.java file> public int namefield = 5;
从我的 main.java
执行文件
我想检索字段名称和值。
display: name of field: namefield value: 5
阅读java.lang.reflect.Field
的javadoc。在那里你可以看到方法 getInt()
您必须调用 field.getInt(object)
,其中对象是 class other
您无法检索字段值,因为(非静态)字段的值是对象的 属性,而您只是通过反射访问它的 class。
要获取字段的值,您首先需要 class other
的对象 anObject
然后您可以调用
field.getInt(anObject);
获取其name字段值。
假设您要检查的 class 是:
public class ClassA {
private String someString = "foo";
public String anotherString = "bar";
}
ClassA.class.getDeclaredFields()
的调用将return 一个包含两个元素的数组,但由于其中一个字段是私有的,因此无法直接访问。为了能够,您必须首先使其可访问:
ClassA objectOfTypeClassA = ...
for (Field f : objectOfTypeClassA.getClass().getDeclaredFields()) {
f.setAccessible(true);
System.out.println("Value of "+f.getName()+" in class "+ClassA.class.getName()+" is "+f.get(objectOfTypeClassA));
}
要检索非静态字段的值,您需要传递定义字段值的对象实例。