![](/img/trans.png)
[英]Java Reflection: Get a Field's Value where the Field is of an Interface Type
[英]Get a field's value
我想獲取用於初始化字段的值。 例:
class ClassA {
public String someString = "Merry Christmas";
}
class ClassB {
String anotherString = ClassA.class.getField("someString");
}
有什么辦法嗎?
首先,您必須在ClassB
創建一個ClassA
實例:
ClassA a = new ClassA(); System.out.println(a.someString);
但是根據您當前代碼的格式,最好的選擇是聲明someString
static: public static String someString = "Merry Christmas";
。 然后,您可以從任何包的任何其他類直接訪問此字段(因為它是公共的):
System.out.println(ClassA.someString);
如果ClassA.string
是static
這將是可能的。 在這種情況下,您將能夠通過反射獲取值,而無需獲得在其中定義了someString
的ClassA
實例的持有權:
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);
}
我認為您不完全了解(非static
)字段的含義:這意味着該字段對於ClassA
每個實例(對象)都有特定的值 ,因此您無法訪問字段內容,因為可能有數千個,每個字段一個不同的值。
有幾種選擇:
一個可能的解決方案是使字段為static
:
ClassA {
public static String someString = "Merry Christmas";
}
ClassB {
String anotherString = ClassA.someString;
}
或者如@toubou所說,您可以構造一個對象並訪問該特定對象的字段。 但是請注意,字段表示對象的狀態,因此可以修改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.