如何动态创建Java类List?

时间:2011-05-26 10:20:55

标签: java groovy

我正在使用groovy 1.8,我想要一个像这样的列表List<MyQueryClass> queryl=new List<MyQueryClass>()
所以使用下面的循环我可以在这个列表中添加更多内容,我该怎么做?

def queryxml=new XmlSlurper().parse(QueryProvider.class.getResourceAsStream( '/queries.xml' ))
    queryxml.query.each { node ->
        operation="${node.@operation.text()}"
        if(operation.equals(op.create.toString()))
        {
            query="${node.text()}"
            println "$query"
            MyQueryClass myQuery=new MyQueryClass (query)
            queryl.add(myQuery)
        }           
    }

2 个答案:

答案 0 :(得分:3)

道歉,我无法正确回答我的问题。
我想通了,因为我无法用抽象接口java.util.List

创建一个实例
List<MyQueryClass> queryl=new ArrayList<MyQueryClass>() 

做的工作。谢谢蒂姆和draganstankovic

答案 1 :(得分:1)

你不要给我们太多的东西,但假设你有一个班级:

@groovy.transform.Canonical class MyQuery {
  String queryText
}

您的XML类似于:

def xml = '''<xml>
  <query operation="create">
    This is q1
  </query>
  <query operation="q2">
    This is q2
  </query>
  <query operation="create">
    This is q3
  </query>
</xml>'''

然后您应该能够使用findAll将xml限制为仅感兴趣的节点,然后collect建立您的对象列表,如下所示:

def queryxml = new XmlSlurper().parseText( xml )

List<MyQuery> query = queryxml.query.findAll { node ->  // Filter the nodes
  node.@operation.text() == 'create'
}.collect { node ->                                     // For each matching node, create a class
  new MyQuery( node.text().trim() )
}

println query

打印出来:

[MyQuery(This is q1), MyQuery(This is q3)]

PS:groovy.transform.Canonical注释is explained here

相关问题