获取字段值
Get a field's value
我想获取初始化字段所用的值。
示例:
class ClassA {
public String someString = "Merry Christmas";
}
class ClassB {
String anotherString = ClassA.class.getField("someString");
}
有什么办法吗?
您首先必须创建一个实例 o ClassA
到 ClassB
:
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.string
是 static
,这将是可能的。在这种情况下,您可以通过 reflection 获取值,而无需在内部获取 ClassA
的 instance其中 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);
}
我想获取初始化字段所用的值。 示例:
class ClassA {
public String someString = "Merry Christmas";
}
class ClassB {
String anotherString = ClassA.class.getField("someString");
}
有什么办法吗?
您首先必须创建一个实例 o ClassA
到 ClassB
:
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.string
是 static
,这将是可能的。在这种情况下,您可以通过 reflection 获取值,而无需在内部获取 ClassA
的 instance其中 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);
}