获得一个字段的价值

时间:2015-12-24 19:25:59

标签: java reflection field

我想获得字段初始化的值。 例如:

class ClassA {
  public String someString = "Merry Christmas";
}

class ClassB {
 String anotherString = ClassA.class.getField("someString");
}

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:1)

首先,您需要在ClassA中创建一个ClassB实例:

ClassA a = new ClassA(); System.out.println(a.someString);

但根据您当前的代码格式,最佳选择是声明someString静态:public static String someString = "Merry Christmas";。然后,您可以从任何其他类的任何包中直接访问此字段(因为它是公共的):
System.out.println(ClassA.someString);

答案 1 :(得分:1)

如果ClassA.stringstatic,则可以这样做。在这种情况下,您可以通过 reflection 获取值,而无需保留ClassA的{​​em>实例,其中someString }已定义:

class ClassA {
  public static String someString = "Merry Christmas";
}
...
Object s = ClassA.class.getField("someString").get(null);

Demo 1.

如果变量不是静态,并且您只想获取其初始值,那么您仍然可以这样做,假设ClassA具有默认构造函数:

public static void demo(Class<?> cl) throws Exception {
    Object s = cl.getField("someString").get(cl.newInstance());
    System.out.println(s);
}

Demo 2.

答案 2 :(得分:0)

我认为您并不完全了解(非static)字段的含义:它表示该字段对{{1}的每个实例(对象)都有特定值因此,您无法访问字段内容,因为可能有数千个,每个都有不同的值。

有几种选择:

可能的解决方案是创建字段ClassA

static

或者正如@toubou所说,你可以构造一个对象并访问该特定对象的字段。但请注意,字段表示对象的状态,因此可以修改。