47 votes

Groovy : comment tester si l'accès à une propriété sera réussi ?

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 'No such property : bar for class : Whatever'.

Comment dois-je faire le test suivant :

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

88voto

julkiewicz Points 3444

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

11voto

Matthias Braun Points 1114

Je fais cela dans mon scripts de Gradle :

if(project.hasProperty("propertyThatMightExist")){
    use(propertyThatMightExist)
}

8voto

Partly Cloudy Points 855

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

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

Ensuite, vous pourrez écrire :

foo.getPropertySafe('bar')

3voto

Cela a marché pour moi :

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

Dans cet exemple, le client est une classe de domaine. Je ne sais pas si cela fonctionnera pour une simple classe Groovy.

0voto

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X