如何从其他java类中检索字段值?

时间:2015-10-03 19:23:53

标签: java reflection data-retrieval

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 

3 个答案:

答案 0 :(得分:0)

阅读java.lang.reflect.Field的{​​{3}}。在那里,您可以看到方法getInt()

您必须调用field.getInt(object),其中object是类other

的实例

答案 1 :(得分:0)

您无法检索字段值,因为(非静态)字段的值是对象的属性,而您只能通过反射访问它的类

要获取字段的值,您首先需要类anObject的对象other,然后才能调用

field.getInt(anObject);

获取其nameField值。

答案 2 :(得分:0)

假设您要检查的班级是:

public class ClassA {
    private String someString = "foo";
    public String anotherString = "bar";
}

ClassA.class.getDeclaredFields()的调用将返回一个包含两个元素的数组,但由于其中一个字段是私有的,因此无法直接访问。为了能够让你首先访问它:

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));
}

要检索非静态字段的值,您需要传递定义字段值的对象实例。