2011-11-25 33 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;'。 –