我是Groovy的新手,尽管阅读了很多文章和问题,但我仍然不清楚发生了什么。 从我到目前为止所理解的,当您在Groovy中创建一个新数组时,底层类型是Java ArrayList。这意味着它应该是可调整大小的,您应该能够将其初始化为空,然后通过add方法动态添加元素,如下所示:
MyType[] list = []
list.add(new MyType(...))
这个编译,但它在运行时失败:没有方法签名:[LMyType; .add()适用于参数类型:( MyType)值:[MyType @ 383bfa16]
执行此操作的正确方法或正确类型是什么?
答案 0 :(得分:52)
Groovy的方法是
def list = []
list << new MyType(...)
创建一个列表并使用重载的leftShift
运算符来追加项目
有很多例子,请参阅Groovy docs on Lists。
答案 1 :(得分:18)
您实际创建的内容:
MyType[] list = []
是大小为0的固定大小数组(非列表)。您可以使用以下命令创建大小为固定大小的数组(例如4):
MyType[] array = new MyType[4]
但当然没有添加方法。
如果您使用def
创建列表,则可以使用Object
创建此实例(您可以阅读有关def
here的更多信息)。在这种情况下,[]
会创建空ArrayList
。
因此,使用def list = []
,您可以使用add()
<{1}}方法追加新项目
ArrayList
或者使用超载左移运算符的更多groovy方式:
list.add(new MyType())