簡體   English   中英

獲取字段的值

[英]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.stringstatic這將是可能的。 在這種情況下,您將能夠通過反射獲取值,而無需獲得在其中定義了someStringClassA 實例的持有權:

class ClassA {
  public static String someString = "Merry Christmas";
}
...
Object s = ClassA.class.getField("someString").get(null);

演示1。

如果變量不是靜態的,而您只想獲取其初始值,則仍然可以做到這一點,假設ClassA具有默認構造函數:

public static void demo(Class<?> cl) throws Exception {
    Object s = cl.getField("someString").get(cl.newInstance());
    System.out.println(s);
}

演示2。

我認為您不完全了解(非static )字段的含義:這意味着該字段對於ClassA每個實例(對象)都有特定的值 ,因此您無法訪問字段內容,因為可能有數千個,每個字段一個不同的值。

有幾種選擇:

一個可能的解決方案是使字段為static

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

ClassB {
    String anotherString = ClassA.someString;
}

或者如@toubou所說,您可以構造一個對象並訪問該特定對象的字段。 但是請注意,字段表示對象的狀態,因此可以修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM