Java反射设定器

时间:2015-02-02 10:44:07

标签: java reflection

我试图通过使用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);                  

                }
            }

        }

    }

}

2 个答案:

答案 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();
    }