我试图确定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/