web-dev-qa-db-ja.com

GroovyでArrayListに要素を動的に追加する

私はGroovyに慣れていないので、これに関する多くの記事や質問を読んでいますが、何が起こっているのかまだわかりません。私がこれまでに理解したことから、Groovyで新しい配列を作成するとき、基礎となる型はJava ArrayListです。これは、サイズを変更できることを意味します。空として初期化し、次のようにaddメソッドを使用して要素を動的に追加できる必要があります。

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

これはコンパイルされますが、実行時に失敗します。メソッドのシグネチャはありません:[LMyType; .add()は引数タイプに適用可能です:(MyType)値:[MyType @ 383bfa16]

これを行うための適切な方法または適切なタイプは何ですか?

40
Captain Franz

これを行うGroovyの方法は

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

リストを作成し、オーバーロードされた leftShift 演算子を使用してアイテムを追加します

多くの例については、Groovy リストに関するドキュメント を参照してください。

56
doelleri

実際に作成したもの:

MyType[] list = []

サイズが0の固定サイズの配列(リストではない)でした。たとえば、次のようにサイズ4の固定サイズの配列を作成できます。

MyType[] array = new MyType[4]

しかし、もちろんaddメソッドはありません。

defを使用してリストを作成すると、Objectを使用してこのインスタンスを作成するようなものになります(defhere の詳細を確認できます)。この場合、[]は空のArrayListを作成します。

def list = []を使用すると、ArrayListadd()メソッドで新しいアイテムを追加できます

list.add(new MyType())

または、オーバーロードされた左シフト演算子を使用したよりグルーヴィな方法:

list << new MyType() 
20
Paweł Piecyk