Ответ 1
Groovy способ сделать это
def list = []
list << new MyType(...)
который создает список и использует перегруженный оператор leftShift
для добавления элемента
Подробные примеры см. в Groovy docs в списках.
Я новичок в Groovy и, несмотря на чтение многих статей и вопросов об этом, я все еще не понимаю, что происходит. Из того, что я понял до сих пор, когда вы создаете новый массив в Groovy, базовым типом является Java ArrayList. Это означает, что он должен быть изменчивым, вы должны иметь возможность инициализировать его как пустую, а затем динамически добавлять элементы через метод add, например:
MyType[] list = []
list.add(new MyType(...))
Этот компилятор, однако, не работает во время выполнения: Нет сигнатуры метода: [LMyType;.add() применим для типов аргументов: (MyType): [MyType @383bfa16]
Каков правильный способ или правильный тип для этого?
Groovy способ сделать это
def list = []
list << new MyType(...)
который создает список и использует перегруженный оператор leftShift
для добавления элемента
Подробные примеры см. в Groovy docs в списках.
Что вы на самом деле создали с помощью:
MyType[] list = []
Был массив фиксированных размеров (не список) с размером 0. Вы можете создать массив фиксированного размера размером, например, с помощью:
MyType[] array = new MyType[4]
Но нет никакого метода добавления, конечно.
Если вы создаете список с def
, это похоже на создание этого экземпляра с помощью Object
(здесь вы можете узнать больше о def
здесь). И []
создает пустой ArrayList
в этом случае.
Таким образом, используя def list = []
, вы можете добавить новые элементы с помощью метода add()
ArrayList
list.add(new MyType())
Или более groovy с перегруженным оператором сдвига влево:
list << new MyType()