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

Groovy具有hasProperty的javadoc,但还不清楚。



这是普通的元协议(protocol)错误吗?

来自Grails 2.2.1的Groovy 2.0.7。

谢谢!

最佳答案

hasProperty标识绑定(bind)到对象的元类的类属性,而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')

关于grails - hasProperty返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17921490/

10-11 17:30