說我有一個類:通過反射獲取一個類的公共靜態最終字段/屬性的值在Java中
public class R {
public static final int _1st = 0x334455;
}
我怎樣才能獲得通過反射的字段/屬性「_1st」的價值?
說我有一個類:通過反射獲取一個類的公共靜態最終字段/屬性的值在Java中
public class R {
public static final int _1st = 0x334455;
}
我怎樣才能獲得通過反射的字段/屬性「_1st」的價值?
首先檢索該類的字段屬性,然後可以檢索該值。如果知道類型,可以使用其中一個get方法(僅用於靜態字段,實際上使用靜態字段,傳遞給get方法的參數將被完全忽略)。否則,你可以用gettype和寫入如下適當的開關:
Field f = R.class.getField("_1st");
Class<?> t = f.getType();
if(t == int.class){
System.out.println(f.getInt(null));
}else if(t == double.class){
System.out.println(f.getDouble(null));
}...
R.class.getField("_1st").get(null);
異常處理作爲練習留給讀者。
基本上你通過反射得到像其他任何其他字段,但是當你調用get方法時,你傳遞一個null值,因爲沒有實例需要執行。
這適用於所有靜態字段,無論它們是最終的。如果該字段不公開,您需要首先調用setAccessible(true)
,當然SecurityManager必須允許所有這些。
我沿着相同的路線(通過生成的R類別看),然後我有這種可怕的感覺,這可能是在資源類中的函數。我是對的。
發現這一點: Resources::getIdentifier
認爲這可能救人一段時間。儘管他們對文件表示不鼓勵,但這並不令人感到意外。
'R._1st'無法正常工作?如果你正在談論Android的開發,我認爲'R'類總是在那裏...... – Matthieu 2015-04-23 15:03:00
@Matthieu我也這麼認爲,直到今天,我必須做同樣的事情,但只有'BR'類。 – Sevastyan 2017-11-08 16:08:57