我试图通过使用java反射设置类成员变量的值,但在调用方法期间它将停止并且不会抛出任何异常或错误。这很刺激我被困在这里plz帮助我.................... 这是我的代码
public class SMapper {
public void SetMapforvalues(Hashtable obj) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
Field[] fields = this.getClass().getDeclaredFields();
for (Field field : fields) {
String fieldName = field.getName();
Object value = obj.get(fieldName);
if (value != null) {
Class<?> type = field.getClass();
if (type.equals(Integer.class)) {
Integer data = (Integer)value;
field.set(this, data);
} else if (type.equals(String.class)) {
String data = (String)value;
field.set(this, data);
} else if (type.equals(Double.class)) {
Double data = (Double) value;
field.set(this, data);
} else {
Method method = type.getMethod("SetMapforvalues");
Object methodreturn = method.invoke(value, obj);
}
}
}
}
}
答案 0 :(得分:0)
问题在于这一行:
Field[] fields = this.getClass().getDeclaredFields();
您正在获取SMapper
课程的声明字段,我怀疑这不是您想要做的。该类没有声明的字段,因此数组为空,永远不会输入for循环。
答案 1 :(得分:0)
如果调用此方法,它应该工作(如果类中没有字段,因为@MrWiggles指出它不会做任何事情),或者产生一个你可能忽略的错误。
最好的方法是在调试器中单步执行代码,或者尝试将所有代码捕获并将其打印到您将看到的位置。
即
public void SetMapforvalues(Hashtable obj) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
try {
Field[] fields = this.getClass().getDeclaredFields();
System.out.println(Arrays.toString(fields));
// your code here
} catch (Throwable t) {
t.printStackTrace();
}