Groovy:如何测试属性访问是否成功?

时间:2011-03-09 02:33:59

标签: groovy properties

我有一个变量Object foo,它不是null。我想使用foo.bar,但只有当它不会用'没有这样的属性来轰炸我:bar for class:Whatever'时。

我应该如何进行以下测试:

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

6 个答案:

答案 0 :(得分:70)

使用object.hasProperty(propertyName)。如果属性存在,这将返回一个truthy值(属性引用)。 object.metaClass.hasProperty(instance, propertyName)也是可能的。使用object.respondsTo(methodName)测试方法是否存在。

答案 1 :(得分:10)

我在Gradle脚本中执行此操作:

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

答案 2 :(得分:5)

如果你在很多食物和酒吧上做,你可以写(一次,但在食物创建之前):

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

然后你可以写:

foo.getPropertySafe('bar')

答案 3 :(得分:3)

这对我有用:

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

此示例中的客户是域类。不确定它是否适用于普通的Groovy类

答案 4 :(得分:0)

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

如果propName是属性, exists = true // vice versa

答案 5 :(得分:-5)

我不能特别为Groovy说话,但在几乎所有动态语言中,我曾经使用惯用的方法来做这件事,并且如果它被抛出则捕获异常,并在异常处理程序中做任何你需要做的事情来明智地处理这种情况。