我有一個名爲A的Java基類和一個派生類名B. 我想從A(基類)訪問B的私有或公共變量的值。
我可以用這個代碼讀取變量名稱,但不是變量值:無法從基類訪問字段值
protected void loadValues()
{
Field[] fields = this.getClass().getDeclaredFields();
for(Field field:fields){
try {
xLog.info(field.getName()+"-"+field.get(this).toString());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
的錯誤是: 進入現場不允許的。
我可以在C#中輕鬆完成。我怎麼能在java中做到這一點? 這是我做的在C#中的方法:你在訪問前場使用field.setAccessible(true);
private void loadValues()
{
foreach (var item in GetType().GetFields())
{
Type type = item.FieldType;
object value = item.GetValue(this);
fields.Add(new Tuple<string, Type, object>(item.Name, type, value));
}
}
還有一點小問題,如果foo沒有變量,會拋出一個execption。如何處理這個? –
@ehsanshirzadi你是什麼意思*無變量*?你的意思是沒有設定值嗎?在這種情況下,你必須檢查'field.get(this)'不返回'null'。 – sp00m
這是我的錯,我的意思是沒有價值。如果您在FOO中沒有值,則會拋出異常。 –