Groovy方法返回null

时间:2017-07-17 20:47:12

标签: groovy

所以我有一个课程" TestClass"

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
    }
}

我在另一个文件中调用TestClass:

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
    }
}

但是testClass.returnRows()为null

我不确定方法returnRows()是否没有返回任何内容,或者我是否没有正确地实例化该类

2 个答案:

答案 0 :(得分:0)

您的代码returnRows()永远不会返回任何有关null的原因的数据。

重写方法returnsRows()代码如下:

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

答案 1 :(得分:0)

方法each是一个不返回任何数据的void方法。 在您的情况下,当您调用each方法时,您将匿名函数传递给它并应用返回以退出此函数。

改为使用方法collect,它必须返回收集的元素列表。

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