2010-12-08 7 views
0

я получил это исключение, когда я использую Java Reflection APIя получил это исключение, когда я использую Java Reflection API

java.lang.IllegalArgumentException 
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37) 
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:18) 
at java.lang.reflect.Field.get(Field.java:357) 

Код:

Field fieldlist[] = TestValue.class.getDeclaredFields(); 
    String result=""; 
    try { 
     for (int i = 0; i < fieldlist.length; i++) { 
      Field fld = fieldlist[i]; 
      result += "name = " + fld.getName() + "\n"; 
      fld.setAccessible(true); 
      result += "value = " + fld.get(this)+ "\n"; 
      System.out.println("Result----->"+result); 
     } 
    } catch (SecurityException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (Exception e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
+0

Вы используете IllegalArgument, пожалуйста, предоставить некоторые более код – Michele 2010-12-08 10:05:29

+0

Что код вызывает исключение выбросить? – 2010-12-08 10:05:48

ответ

3

Просто угадывание, но, ... Поле для типа, который не совпадает с объектом, который вы передаете.

EDIT: вы получаете поля TestClass и используете их для поиска текущего объекта.

Вместо этого вы можете написать следующее для поиска в поле класса для это

Field fieldlist[] = this.getClass().getDeclaredFields(); 
Смежные вопросы