在Java中反映数组
我是Java新手,有一项任务是编写一些应用程序。面临一个无法通过的问题:( 问题是通过反射更新数组元素(应用程序根据字符串应用程序从文件中读取的内容选择要更新的公共数组): 首先,我将布尔变量反映如下:在Java中反映数组,java,arrays,reflection,Java,Arrays,Reflection,我是Java新手,有一项任务是编写一些应用程序。面临一个无法通过的问题:( 问题是通过反射更新数组元素(应用程序根据字符串应用程序从文件中读取的内容选择要更新的公共数组): 首先,我将布尔变量反映如下: activity = activityName(activities[i].substring(0,activities[i].lastIndexOf('.', activities[i].length() - 4))); Field field = refClass.getField(ac
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);
这对我很有效。但现在我需要使用数组而不是正则变量,并尝试如下所示:
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\u act.setBoolean(field\u act,LMKStorage.currentLmkSlot,true);
中,field\u act
是布尔值[]我用.getField(activity)
得到,LMKStorage.currentLmkSlot
是int来确定数组的哪个位置要设置和“true”是要设置的值。我必须获得100%的字段是数组,因为我在refClass中没有非数组静态变量
到目前为止,我已经有了一些学习书籍。但仍然没有。我尝试用谷歌搜索任何例子来更新数组元素…对我来说没有任何用处
请给出建议。对于数组,请使用而不是java.lang.reflect.Field
Object field_act = field.get(obj);
Array.setBoolean(field_act, LMKStorage.currentLmkSlot, true);
为什么要使用
字段\u act
变量而不是字段
?对象
没有setBoolean
方法。你能发布你的实际代码吗?你的工作示例让我有点困惑。你的obj变量是字段表示对象?obj应该是你的refClass的某个实例。实际上,我试过了y方式,并且field
也是。activity=activityName(activities[i]。子字符串(0,activities[i]。lastIndexOf('.',activities[i].length()-4));field-field=refClass.getField(activity);Object-field_-act=field;Array.setBoolean(field,LMKStorage.currentLmkSlot,true);只是尝试使用
field`它是field
类型,并且get:java.lang.IllegalArgumentException:Argument不是一个数组,你不是可以用字段检索数组吗。get
,将其转换为布尔值[]
,并在其中设置值?抱歉,对于设置帖子格式的错误,我是第一次来这里,并尝试让我的帖子变得更好。是的,你是对的,这是我提问时的错误。正确的代码是:Array.setBoolean(field\u act,LMKStorage.currentLmkSlot,true);那么错误就在代码中。您应该将对象字段_act=field;
替换为对象字段_act=field.get(obj);
。