2016-07-13 7 views
5

Ich lerne groovy und ich versuche, meine Klasse dynamisch mit Standardwerten für alle Felder zu initialisieren. So, wie ich fortfahren wird, nehme ich die Liste aller Eigenschaften und bekommen die Art des Objekts, und erstellen Sie ein Objekt des Typs, aber ich bin immer Fehler, wenn newInstance Ausführung:Konnte nicht finden, welche Methode <init>() aus dieser Liste auf newInstance in groovy Schließung aufrufen

Exception in thread "main" org.codehaus.groovy.runtime.metaclass.MethodSelectionException: Could not find which method <init>() to invoke from this list: 
    public java.lang.Boolean#<init>(boolean) 
    public java.lang.Boolean#<init>(java.lang.String) 
    at groovy.lang.MetaClassImpl.chooseMethodInternal(MetaClassImpl.java:3160) 
    at groovy.lang.MetaClassImpl.chooseMethod(MetaClassImpl.java:3097) 
    at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1707) 
    at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1526) 

Unten ist die

Code
public static void init() { 
     Position position1 = new Position(); 

     JXPathContext context = JXPathContext.newContext(position1) 
     context.createPathAndSetValue('id', '2') 

     position1.properties.each { Map.Entry entry -> 
      String propertyName = entry.key; 
      if (!propertyName.equalsIgnoreCase('class')) { 
       Class clazz = position1.class.getDeclaredField(propertyName)?.type 
       println "$clazz" 
       Object ob = clazz.newInstance() 
      } 

     } 
     Identifier sourceSystemPositionId = new Identifier() 

     context.setValue('sourceSystemPositionId/content', 'default-content') 
     context.setValue('sourceSystemPositionId/domain', 'default-domain') 

     println "$position1" 
    } 
+0

Sie initialisieren versuchen um ein neues 'java.lang.Boolean'-Objekt zu erstellen, aber die Klasse' java.lang.Boolean' hat keinen Konstruktor, der keine Argumente annimmt. – Jesper

Antwort

4

Ansicht der java docs für java.lang.Boolean. Wie Sie im Abschnitt Constructor Summary sehen können, gibt es für diese Klasse keinen no-arg-Konstruktor (und das ist was eine Exception-Nachricht sagt). Sie müssen entweder:

  • es (Konstruktor) aufrufen mit boolean oder String Argument
  • Verwendung Standardwert für boolean - die false ist
  • den Wert mit Boolean.FALSE oder Boolean.TRUE