在 Groovy 中将元素动态添加到 ArrayList

2022-08-31 19:50:19

我是Groovy的新手,尽管阅读了许多文章和有关此的问题,但我仍然不清楚发生了什么。根据我到目前为止的理解,当你在Groovy中创建新数组时,底层类型是Java ArrayList。这意味着它应该是可调整大小的,你应该能够将其初始化为空,然后通过add方法动态添加元素,如下所示:

MyType[] list = []
list.add(new MyType(...))

这会编译,但是在运行时失败:没有方法的签名:[LMyType;。add() 适用于参数类型:(MyType) 值:[MyType@383bfa16]

执行此操作的正确方法或正确类型是什么?


答案 1

时髦的方法是

def list = []
list << new MyType(...)

这将创建一个列表,并使用重载的 leftShift 运算符追加一个项目

有关许多示例,请参阅列表上的 Groovy 文档。


答案 2

您实际使用的内容:

MyType[] list = []

是大小为 0 的固定大小数组(不是列表)。您可以使用以下命令创建大小为 4 的固定大小数组:

MyType[] array = new MyType[4]

但是当然没有添加方法。

如果您创建列表,则类似于创建此实例(您可以在此处阅读有关以下内容的详细信息)。在这种情况下,将创建空。defObjectdef[]ArrayList

因此,使用您可以然后使用方法附加新项目def list = []add()ArrayList

list.add(new MyType())

或者更时髦的方式与过载的左移操作员:

list << new MyType()