2017-07-17 3 views
0

So habe ich eine Klasse "Testclass"Groovy Methode Rückkehr null

class TestClass { 
    public abstract class Test { 
     private String _string 

     public Test(String string) { 
      _string = string 
     } 

     private TreeSet<List<String>> _rows = new TreeSet<List<String>>() 
     public Collection<List<String>> getRows() { 
      return _rows 
     } 
     public abstract void processObject(XmlObject object) 
    } 
    private List<Test> list = [ 
     new getData() //long list of classes 
    ] 

    //this method is supposed to to through the list and return "_rows" which doesnt seem to work 
    public List<Test> returnRows() { 
     list.each { Test test -> 
      return test.getRows() 
     } 
    } 
    public getData extends Test { 
     public getData() { 
      super('test') 
     } 
     @Override 
     public void processObject(XmlObject object) { 
      getRows().add(['test']) 
     } 
    } 
    public TestClass() { 
     //constructor 
    } 
} 

I Testclass in einer anderen Datei hier nenne:

class AnotherClass { 
    public void run() { 
     def testClass 
     testClass = getClass().classLoader.parseClass(new File(classpath)).newInstance() 
     testClass.returnRows().each { //it is failing here saying that testClass.returnRows() is null 
    } 
} 

aber testClass.returnRows() ist null

Ich bin mir nicht sicher, ob die Methode returnRows() nichts liefert oder ob ich die Klasse nicht korrekt instanziiere.

+1

Es sieht so aus, als müssten Sie lernen, einen Debugger zu verwenden. Bitte helfen Sie sich mit ergänzenden Debugging-Techniken. –

+0

Das erste Problem ist, dass Sie 'list.each {...}' anstatt 'list.each() {...}' caling sollten. –

+0

'each() {}' ist übermäßig ausführlich, aber kein Problem – cfrick

Antwort

0

Ihr Code returnRows() gibt niemals irgendwelche Daten zurück, deshalb erhalten Sie null.

Rewrite Methode returnsRows() Code wie folgt:

public List<Test> returnRows() { 
     def returnListVariable=[] 
     list.each { Test test -> 
      //test.getRows() 
      returnListVariable << test.getRows() 
     } 
     return returnListVariable 
    } 
0

each Methode ist eine Methode, die Lücke keine Daten zurückgibt. In Ihrem Fall, wenn Sie each Methode aufrufen, übergeben Sie eine anonyme Funktion, und wenden Sie eine Rückkehr, um diese Funktion zu beenden.

Verwenden Sie stattdessen die Methode collect, die die Liste der gesammelten Elemente zurückgeben muss.

public List<Test> returnRows() { 
    return list.collect({ Test test -> 
     return test.getRows() 
    }) 
}