在Groovy中向ArrayList动态添加元素

Cap*_*anz 43 java groovy list arraylist

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

MyType[] list = []
list.add(new MyType(...))
Run Code Online (Sandbox Code Playgroud)

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

这样做的正确方法或适当类型是什么?

doe*_*eri 60

Groovy这样做的方法是

def list = []
list << new MyType(...)
Run Code Online (Sandbox Code Playgroud)

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

有关大量示例,请参阅列表中的Groovy 文档.

  • 你可以使用`List <MyList> list = []`,但如果你没有使用`CompileStatic`,它基本上会被忽略 (5认同)

Paw*_*cyk 23

你实际创建的是:

MyType[] list = []
Run Code Online (Sandbox Code Playgroud)

是固定大小的数组(非列表),大小为0.您可以创建大小固定的大小数组,例如4:

MyType[] array = new MyType[4]
Run Code Online (Sandbox Code Playgroud)

但是当然没有添加方法.

如果您使用def它创建列表就像创建此实例Object(您可以def 在这里阅读更多信息).并在这种情况下[]创建空ArrayList.

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

list.add(new MyType())
Run Code Online (Sandbox Code Playgroud)

或者使用超载左移运算符的更多groovy方式:

list << new MyType() 
Run Code Online (Sandbox Code Playgroud)