2010-12-08 4 views
0

ich diese Ausnahme bekam, wenn ich Java-Reflexion apiIch habe diese Ausnahme, wenn ich Java-Reflexion api bin mit

bin mit
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) 

Code:

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

Sie verwenden einen IllegalArgument schreiben, bitte – Michele

+0

etwas mehr Code zur Verfügung stellen Was ist der Code die Ausnahme verursacht geworfen werden? –

+0

Könnten Sie bitte Ihren Code posten? Und die Klasse, die du durch Reflexion benutzen willst. Es sieht so aus, als würden Sie eine Instanz der falschen Klasse an eine Methode übergeben. – daveb

Antwort

3

nur raten, aber ... das Field ist für einen Typ, der nicht mit dem Objekt übereinstimmt, das Sie übergeben.

EDIT: Sie erhalten die Felder von TestClass und verwenden sie, um das aktuelle Objekt zu suchen.

Stattdessen können Sie die folgenden Nachschlag das Feld der Klasse für diese

Field fieldlist[] = this.getClass().getDeclaredFields(); 
+0

+1 - das ist konsistent mit dem Javadoc. OP - lies das Javadoc! –

Verwandte Themen