我对 Java 的缺乏再次困扰着我。我有以下成员函数:
protected void setData(Map<String, String[]> data) {
Class thisClass = this.getClass();
for(Map.Entry<String, String[]> item : data.entrySet()) {
try {
Field field = thisClass.getDeclaredField(item.getKey());
try {
if(field.getType().getName().equals("java.lang.Long")) {
// EXCEPTION HERE!!!
field.setLong(this, Long.valueOf(item.getValue()[0]) );
}...
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (NoSuchFieldException e) {
// Skip this field...
continue;
}
}
}
我不断收到 IllegalArgumentException,但我不完全明白为什么。谁能提供一些见解?
该函数采用一个映射,对其进行迭代,并通过检查“this”上是否存在该字段来将值分配给“this”,如果存在,则尝试调用 field.set()
.
最佳答案
setLong(..)
尝试设置一个原始值,并且您的字段是 java.lang.Long
。对于非基元,始终使用 set(..)
方法。对于基元 getType().getName()
将返回 int
、long
等。
初始答案:您需要使该字段可访问:field.setAccessible(true)
关于java - 这段反射代码有什么错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6835391/