hasProperty返回null

时间:2013-07-29 10:20:29

标签: grails groovy

我试图确定Groovy(实际上是Grails域)类是否具有hasProperty方法的属性。它总是返回null。 getProperty发现了这一点。这两种方法有什么区别?

Groovy有hasProperty的javadoc,但它根本不清楚。

  

返回true,实现MetaClass具有给定名称的属性

     

请注意,此方法仅对已实现的属性返回true,并且不会进入   getProperty或propertyMissing的帐户实现

这个groovy元协议错误?

Grails 2.0.7来自grails 2.2.1。

谢谢!

1 个答案:

答案 0 :(得分:0)

hasProperty标识绑定到对象元类的类属性,而getProperty可以是非常随意的:您可以编写一个方法来返回您想要的任何内容。 hasProperty如何进入?正在执行getProperty?对我来说似乎有点奇怪。

您可以覆盖hasProperty,以便它考虑getProperty中的任何逻辑:

class Person {
  Map otherProperties = [:]
  def getProperty(String property) {
    otherProperties[property]
  }

  void setProperty(String prop, value) { 
    otherProperties[prop] = value 
  }

  boolean hasProperty(String property) { 
    otherProperties.containsKey(property) 
  }
}

p = new Person()
p.name = "John"
p.age = 40

assert p.hasProperty('name')
assert p.hasProperty('age')
assert !p.hasProperty('dob')