2013-07-29 54 views
2

我想確定Groovy(實際上是Grails域)類是否具有hasProperty方法的屬性。它總是返回null。 getProperty創建此項。這兩種方法有什麼區別?hasProperty返回null

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

真正的實現元類返回具有給定的名稱

注意,此方法只適用於實現屬性返回true,並沒有考慮到 考慮實施的getProperty或propertyMissing

的屬性

這是Groovy元協議錯誤?

grails的Groovy 2.0.7 2.2.1。

謝謝!

+0

那是一個靜態屬性你正在尋找? – Alidad

回答

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')