2013-06-10 18 views
0

Je suis assez nouveau à groovy donc supporter avec moi mais j'ai un tas de code similaire que j'essaye de nourrir dans un tableau . C'est assez simple, j'ai ma déclaration de tableau à le sommet, puis déclarer des variables similaires les uns aux autres ci-dessous. Je seulement inclus trois mais en réalité j'ai environ 10. Sauf que cela ne fonctionne pas et je n'ai aucune idée pourquoi? Si quelqu'un a des idées, c'est très apprécié.Déclaration de tableau Groovy

def properties = resource.adaptTo(ValueMap.class) ?: [] 
headerText = properties["headerText"] ?: "" 
bodyText = properties["bodyText"] ?: "" 
footerText = properties["footerText"] ?: "" 

erreur ci-dessous:

Caused by: groovy.lang.MissingPropertyException: No such property: headerText for class 
+1

C'est d'inclure * quoi * et * comment * les choses ne fonctionnent pas. Êtes-vous sûr d'avoir une déclaration de tableau? Les tableaux Java sont indexés par des nombres et non par des chaînes. Essaies-tu plutôt de faire une carte vide, '[:]'? Qu'est-ce qu'un 'ValueMap'? Qu'est-ce que 'resource.adaptTo'? Inclut-il l'accès aux propriétés mappées? La propriété existe-t-elle? –

+0

Je suppose que vous voulez une carte ('[:]', comme Dave l'a dit). D'autres langages (PHP, je vous regarde) appellent ça un "tableau" même si c'est une carte associative. Et "tableau" dans Java/Groovy est plus comme une liste. –

+0

Si je comprends bien, alors mon code serait quelque chose de similaire à: ** def properties = resource.adaptTo (ValueMap.class)?: [:] ** ?? –

Répondre

1

Je suis probablement manque quelque chose, il semble facile - mais:

 
def properties = resource.adaptTo(ValueMap.class) ?: [:] 
def headerText = properties["headerText"] ?: "" 
def bodyText = properties["bodyText"] ?: "" 
def footerText = properties["footerText"] ?: "" 

semble que cela devrait fonctionner. Si vous l'exécutez en tant que script (pas à l'intérieur d'une classe), supprimez TOUS les defs - ils sont obligatoires dans les classes mais vont casser les scripts - mais si vous l'utilisiez comme script je m'attendais à voir il dit que "properties" n'a pas été défini, pas "headerText" donc je suppose qu'il fait partie d'une classe.

+0

'[]' est une liste, de sorte qu'une partie, au moins, ne fonctionnera jamais. Mais IMO le reste est également incorrect; il semble qu'il n'y ait pas un "headerText" exposé comme une propriété. C'est la même erreur que si vous essayiez d'accéder à une propriété de classe qui n'existe pas, par exemple 'class Foo {def fname}; f = nouveau Foo(); f ["wat"] ' –

+0

wow je me sens comme un idiot c'était parce que je n'ai pas déclaré ** def ** merci pour l'aide! –

+0

Puis je le reprends :) Sauf pour la partie liste. –