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处理程序中执行任何操作需要做的是明智地处理这种情况。