获取字段值

Get a field's value

我想获取初始化字段所用的值。 示例:

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

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

有什么办法吗?

您首先必须创建一个实例 o ClassAClassB:

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

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

我认为您没有完全理解(非static)字段的含义:它意味着该字段对于每个实例(对象)都有一个特定值 ClassA,因此您无法访问字段内容,因为可能有数千个,每个都有不同的值。

有几种选择:

一个可能的解决方案是使字段 static:

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

ClassB {
    String anotherString = ClassA.someString;
}

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

如果 ClassA.stringstatic,这将是可能的。在这种情况下,您可以通过 reflection 获取值,而无需在内部获取 ClassAinstance其中 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.