2011-11-25 69 views
0

我是Java新手,有寫任何應用程序的任務。面臨一個問題,其不能通:(在Java中反映數組

的問題是通過反射來更新一個數組元素(應用選擇公共陣列來更新dinamicaly取決於字符串app讀取文件時):

首先,我已經反映布爾變量如下:

activity = activityName(activities[i].substring(0,activities[i].lastIndexOf('.', activities[i].length() - 4))); 
Field field = refClass.getField(activity); 
Object obj = field; 
field.setBoolean(obj, true); 

這爲我工作很好但現在我需要使用數組,而不是常規的變量,並試圖做出如下:

activity = activityName(activities[i].substring(0, activities[i].lastIndexOf('.', activities[i].length() - 4))); 
Field field = refClass.getField(activity); 
Object field_act = field; 
field_act.setBoolean(field_act, LMKStorage.currentLmkSlot, true); 

並獲得異常「參數不是數組」。 :(

field_act.setBoolean(field_act, LMKStorage.currentLmkSlot, true);field_act是布爾[] i相.getField(activity)得到AM,LMKStorage.currentLmkSlot爲int確定哪個陣列的位置來設置和「true」是值來設置該field_act我必須獲得100%是一個數組,因爲我在refClass中沒有非數組的靜態變量。

到目前爲止我已經學習了我的書。

請指教

+0

你爲什麼使用field_act變量而不是field? 'Object'沒有'setBoolean'方法。你能發佈你的實際代碼嗎? – Kane

+0

我對你的工作例子有點困惑。你的obj變量是字段表示對象? obj應該是你的refClass的一些實例。 –

+0

其實,我嘗試了很多方法,而'field'也是。 activity = activityName(activities [i] .substring(0,activities [i] .lastIndexOf('。',activities [i] .length() - 4))); Field field = refClass.getField(activity); 對象field_act = field; Array.setBoolean(field,LMKStorage.currentLmkSlot,true);只是嘗試使用'Field',它是'Field'類型並得到:java.lang.IllegalArgumentException:參數不是數組 – Juris

回答

1

對於數組,使用java.lang.reflect.Array而不是java.lang.reflect.Field

Object field_act = field.get(obj); 
Array.setBoolean(field_act, LMKStorage.currentLmkSlot, true); 
+0

Yess,你說的沒錯,這是我提出問題時的錯誤。正確的代碼是:Array.setBoolean(field_act,LMKStorage.currentLmkSlot,true); – Juris

+0

然後錯誤在你的代碼中。你應該用'Object field_act = field.get(obj)'這行代替'Object field_act = field;'。 –