我想获得字段初始化的值。 例如:
class ClassA {
public String someString = "Merry Christmas";
}
class ClassB {
String anotherString = ClassA.class.getField("someString");
}
有没有办法做到这一点?
答案 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.string
为static
,则可以这样做。在这种情况下,您可以通过 reflection 获取值,而无需保留ClassA
的{em>实例,其中someString
}已定义:
class ClassA {
public static String someString = "Merry Christmas";
}
...
Object s = ClassA.class.getField("someString").get(null);
如果变量不是静态,并且您只想获取其初始值,那么您仍然可以这样做,假设ClassA
具有默认构造函数:
public static void demo(Class<?> cl) throws Exception {
Object s = cl.getField("someString").get(cl.newInstance());
System.out.println(s);
}
答案 2 :(得分:0)
我认为您并不完全了解(非static
)字段的含义:它表示该字段对{{1}的每个实例(对象)都有特定值因此,您无法访问字段内容,因为可能有数千个,每个都有不同的值。
有几种选择:
可能的解决方案是创建字段ClassA
:
static
或者正如@toubou所说,你可以构造一个对象并访问该特定对象的字段。但请注意,字段表示对象的状态,因此可以修改。