我正在使用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)
        }
    }

最佳答案

您没有给我们太多帮助,但是假设您有一堂课:

@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

关于java - 如何动态创建Java类列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6137014/

10-11 15:31
查看更多