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?
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.
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 def
ici ). 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()