Подтвердить что ты не робот

Динамическое добавление элементов в ArrayList в Groovy

Я новичок в Groovy и, несмотря на чтение многих статей и вопросов об этом, я все еще не понимаю, что происходит. Из того, что я понял до сих пор, когда вы создаете новый массив в Groovy, базовым типом является Java ArrayList. Это означает, что он должен быть изменчивым, вы должны иметь возможность инициализировать его как пустую, а затем динамически добавлять элементы через метод add, например:

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

Этот компилятор, однако, не работает во время выполнения: Нет сигнатуры метода: [LMyType;.add() применим для типов аргументов: (MyType): [MyType @383bfa16]

Каков правильный способ или правильный тип для этого?

4b9b3361

Ответ 1

Groovy способ сделать это

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

который создает список и использует перегруженный оператор leftShift для добавления элемента

Подробные примеры см. в Groovy docs в списках.

Ответ 2

Что вы на самом деле создали с помощью:

MyType[] list = []

Был массив фиксированных размеров (не список) с размером 0. Вы можете создать массив фиксированного размера размером, например, с помощью:

MyType[] array = new MyType[4]

Но нет никакого метода добавления, конечно.

Если вы создаете список с def, это похоже на создание этого экземпляра с помощью Object (здесь вы можете узнать больше о def здесь). И [] создает пустой ArrayList в этом случае.

Таким образом, используя def list = [], вы можете добавить новые элементы с помощью метода add() ArrayList

list.add(new MyType())

Или более groovy с перегруженным оператором сдвига влево:

list << new MyType()