我想獲得字段爲初始化的值。 例如:獲得一個字段的值
class ClassA {
public String someString = "Merry Christmas";
}
class ClassB {
String anotherString = ClassA.class.getField("someString");
}
有沒有辦法做到這一點?
我想獲得字段爲初始化的值。 例如:獲得一個字段的值
class ClassA {
public String someString = "Merry Christmas";
}
class ClassB {
String anotherString = ClassA.class.getField("someString");
}
有沒有辦法做到這一點?
如果ClassA.string
是static
,這將是可能的。在這種情況下,你就可以通過反射來獲取值,而不需要獲得一個實例ClassA
的保持其內部被定義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);
}
我現在將ClassString所在的Class作爲Class >給ClassB。我怎樣才能從那個類>創建一個新對象? – MyNameIsHans
@MyNameIsHans如果你有一個類型爲'Class >'的變量'cl',你可以做'cl.getField(「someString」)。get(null)'。 – dasblinkenlight
是的。但我希望'someString'保持非靜態,這就是爲什麼我必須創建一個'cl'的新對象。 (我需要'someString'初始化的值) – MyNameIsHans
你首先要創建一個實例ØClassA
到ClassB
:
ClassA a = new ClassA(); System.out.println(a.someString);
但根據您的代碼的當前格式時,最好的辦法是宣佈someString
靜:public static String someString = "Merry Christmas";
。然後,你可以直接從任何其他類中的任何包的訪問此字段(因爲它是公共的):
System.out.println(ClassA.someString);
我覺得你不完全瞭解什麼是(非static
)字段表示:這意味着該領域擁有特定值對於每個實例(對象)ClassA
,因此您無法訪問字段內容,因爲可能會有成千上萬個不同的值。
有幾種選擇:
一個可能的解決方案是讓現場static
:
ClassA {
public static String someString = "Merry Christmas";
}
ClassB {
String anotherString = ClassA.someString;
}
或者像@toubou說,你可以構造一個對象,並訪問特定對象的字段。但請注意,該字段代表對象的狀態,因此可以修改。
請問dv'er請解釋這個答案有什麼問題? –
'新ClassA的()。someString' –
這僅僅是一個例子。我正在創建一個帶有註釋的設置系統,所以我只能在我的settingsManager中使用該字段 – MyNameIsHans