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)
}
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.
Je le fais dans mes scripts Gradle:
if(project.hasProperty("propertyThatMightExist")){
use(propertyThatMightExist)
}
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')
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
boolean exist = Person.metaClass.properties.any{it.name == 'propName'}
si propName est un attribut, exist = true // vice versa