2016-07-13 17 views
5

Sto imparando groovy e sto provando a inizializzare la mia classe in modo dinamico con i valori predefiniti per tutti i campi. Così come sto procedimento è, mi prendo la lista di tutte le proprietà e ottenere il tipo di tale oggetto e creare un oggetto del tipo, ma sto ottenendo errore durante l'esecuzione newInstance:Impossibile trovare il metodo <init>() per richiamare da questo elenco su newInstance in chiusura groovy

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) 

riportano di seguito le codice

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

Si sta cercando per creare un nuovo oggetto 'java.lang.Boolean', ma la classe' java.lang.Boolean' non ha un costruttore che non accetta argomenti. – Jesper

risposta

4

Vedere le java docs per java.lang.Boolean. Come potete vedere nella sezione Constructor Summary non esiste un costruttore no-arg (e questo è ciò che dice il messaggio di eccezione) per questa classe. È necessario:

  • invocarlo (costruttore) con boolean o String argomento
  • uso valore di default per booleano - che è false
  • inizializzare il valore con Boolean.FALSE o Boolean.TRUE
Problemi correlati