web-dev-qa-db-fra.com

Groovy: comment vérifier si un accès à une propriété réussira?

J'ai une variable objet foo, qui n'est pas nulle. Je veux utiliser foo.bar, mais seulement s'il ne me bombarde pas avec 'Aucune propriété de ce type: bar pour classe: Peu importe'. 

Comment dois-je faire le test suivant:

if (/*test-here*/) {
  use(foo.bar)
}
38
fernacolo

Utilisez object.hasProperty(propertyName). Cela retournera une valeur de vérité (la référence de la propriété) si la propriété existe. object.metaClass.hasProperty(instance, propertyName) est également possible. Utilisez object.respondsTo(methodName) pour tester l'existence d'une méthode.

70
julkiewicz

Je le fais dans mes scripts Gradle:

if(project.hasProperty("propertyThatMightExist")){
    use(propertyThatMightExist)
}
10
Matthias Braun

Si vous le faites sur beaucoup de foos et de bars, vous pouvez écrire (une fois, mais avant que foo soit créé):

Object.metaClass.getPropertySafe = 
    { delegate.hasProperty(it)?.getProperty(delegate) }

Ensuite, vous pouvez écrire:

foo.getPropertySafe('bar')
5
Partly Cloudy

Cela a fonctionné pour moi:

Customer.metaClass.properties.find{it.name == 'propertyName'}.

Le client dans cet exemple est une classe de domaine. Je ne sais pas si cela fonctionnera pour une classe Groovy simple

3
Michael Wanyoike
boolean exist = Person.metaClass.properties.any{it.name == 'propName'}

si propName est un attribut, exist = true // vice versa

0
Abdennour TOUMI