如何动态创建Java类List?

发布于 2024-11-09 16:52:46 字数 739 浏览 0 评论 0原文

我正在使用 groovy 1.8,我想要一个类似这样的列表
Listqueryl=new List()
这样,使用下面的循环我可以向此列表添加更多内容,我该怎么做?

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

I am using groovy 1.8 where i want to have a list something like this
List<MyQueryClass> queryl=new List<MyQueryClass>()
So that using the below loop i can add more to this list, how can I do that?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

碍人泪离人颜 2024-11-16 16:52:46

抱歉,我无法正确表达我的问题。
我想通了,因为我无法从抽象接口 java.util.List 中创建实例

List<MyQueryClass> queryl=new ArrayList<MyQueryClass>() 

来完成这项工作。谢谢蒂姆和德拉甘斯坦科维奇

My apologies, I could not convey my question properly.
I figured it out, as I cannot create an instance out of a abstract interface java.util.List

List<MyQueryClass> queryl=new ArrayList<MyQueryClass>() 

does the work. Thanks tim and draganstankovic

秋心╮凉 2024-11-16 16:52:46

您没有给我们太多信息,但假设您有一个类:

@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
  [email protected]() == '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: The groovy.transform.Canonical 注释 此处解释

You don't give us much to go on, but assuming you have a class:

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

And your XML is similar to:

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

Then you should be able to use findAll to limit the xml to just the nodes of interest, followed by collect to build up your list of objects like so:

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

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

println query

And that prints out:

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

PS: The groovy.transform.Canonical annotation is explained here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文