2015-02-02 3 views
0

Я пытаюсь установить значения переменной-члена класса с помощью java-отражения, но при вызове метода он остановится и не вызывает никаких исключений или ошибок. Это раздражает я застрял здесь плз помочь мне .................... Вот мой кодJava Reflection Setter

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

() метод – StanislavL

ответ

0

Проблема заключается в этой строке:

Field[] fields = this.getClass().getDeclaredFields(); 

Вы получаете объявленные поля вашего класса SMapper, который, как я подозреваю, не является тем, что вы хотите сделать. Этот класс не имеет объявленных полей, поэтому массив пуст, и цикл for никогда не вводится.

+0

getDeclaredFields не даст вам никаких полей для супер класса Используйте в Spring ReflectionUtils.doWithFields. –

+0

На самом деле я вызываю эту функцию из другого объекта класса X, который унаследован от SMapper, поэтому он получит поля класса X, но после завершения цикла он не собирается вызывать метод для объекта класса Y, который объявлен в классе X и X и Y оба наследуются от SMapper. –

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