我试图确定Groovy(实际上是Grails域)类是否具有hasProperty
方法的属性。它总是返回null。 getProperty
发现了这一点。这两种方法有什么区别?
Groovy有hasProperty的javadoc,但它根本不清楚。
返回true,实现MetaClass具有给定名称的属性
请注意,此方法仅对已实现的属性返回true,并且不会进入 getProperty或propertyMissing的帐户实现
这个groovy元协议错误?
Grails 2.0.7来自grails 2.2.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')