3

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

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

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

请注意,此方法仅对已实现的属性返回 true,并且不考虑 getProperty 或 propertyMissing 的实现

这是 groovy 元协议错误吗?

来自 grails 2.2.1 的 Groovy 2.0.7。

谢谢!

4

1 回答 1

1

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')
于 2013-07-29T12:06:42.150 回答