2013-07-29 3 views
2

Я пытаюсь определить, имеет ли класс Groovy (на самом деле Grails) класс с методом hasProperty. Он всегда возвращает null. getProperty находит это. В чем разница между этими двумя методами?hasProperty возвращает null

У Groovy есть javadoc для hasProperty, но это не совсем понятно.

Возвращает истинное от исполнителя метакласса имеет свойство с данным именем

Следует отметить, что этот метод будет возвращать истину лишь для реализованных свойств и не учитывает реализации счета в GetProperty или propertyMissing

Является ли эта сложная ошибка протокола мета?

Groovy 2.0.7 from grails 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') 
Смежные вопросы