web-dev-qa-db-fra.com

Ajout dynamique d'éléments à ArrayList dans Groovy

Je suis nouveau sur Groovy et, malgré la lecture de nombreux articles et questions à ce sujet, je ne comprends toujours pas ce qui se passe. D'après ce que j'ai compris jusqu'à présent, lorsque vous créez un nouveau tableau dans Groovy, le type sous-jacent est un Java ArrayList. Cela signifie qu'il devrait être redimensionnable, vous devriez pouvoir l'initialiser comme vide. puis ajouter dynamiquement des éléments via la méthode add, comme suit:

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

Ceci compile, mais échoue à l'exécution: aucune signature de méthode: [LMyType; .add () est applicable pour les types d'argument: (MyType), valeurs: [MyType @ 383bfa16]

Quel est le bon moyen ou le bon type pour le faire?

40
Captain Franz

La meilleure façon de le faire est

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

qui crée une liste et utilise l'opérateur leftShift surchargé pour ajouter un élément

Voir Groovy docs on Lists pour de nombreux exemples.

56
doelleri

Qu'est-ce que vous avez réellement créé avec:

MyType[] list = []

Était un tableau de taille fixe (pas de liste) avec une taille de 0. Vous pouvez créer un tableau de taille fixe de taille, par exemple 4 avec:

MyType[] array = new MyType[4]

Mais il n'y a pas de méthode add bien sûr.

Si vous créez une liste avec def, vous créez quelque chose comme cette instance avec Object (pour en savoir plus sur defici ). Et [] Crée vide ArrayList dans ce cas.

Donc, en utilisant def list = [] Vous pouvez ensuite ajouter de nouveaux éléments avec la méthode add() de ArrayList

list.add(new MyType())

Ou de façon plus groovy avec un opérateur de décalage gauche surchargé:

list << new MyType() 
20
Paweł Piecyk