Groovy:如何testing一个属性访问会成功?

我有一个variables对象foo,它不是null。 我想使用foo.bar,但只有当它不会轰炸我'没有这样的属性:上课吧:无论如何'。

我应该如何做以下testing:

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

使用object.hasProperty(propertyName) 。 如果财产存在,这将返回一个真值(财产参考)。 也object.metaClass.hasProperty(instance, propertyName)是可能的。 使用object.respondsTo(methodName)来testing方法的存在。

我在我的Gradle脚本中这样做:

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

如果你正在做大量的foos和bars,你可以写(一次,但在foo被创build之前):

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

那么你可以写:

 foo.getPropertySafe('bar') 

这对我工作:

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

这个例子中的客户是一个域类。 不知道它是否适用于普通的Groovy类

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

如果propName是一个属性,则存在= true // vice versa

我不能专门为Groovy说话,但是几乎所有我用过的dynamic语言都是这样做的,就是做到这一点,如果抛出exception,就会捕获exception,并且在exception处理程序中执行任何操作需要做的是明智地处理这种情况。