首页 文章

hasProperty返回null

提问于
浏览
2

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

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

返回true实现MetaClass具有给定名称的属性请注意,此方法仅对已实现的属性返回true,并且不考虑getProperty或propertyMissing的实现

这个groovy元协议错误?

Groils 2.0.7来自grails 2.2.1 .

谢谢!

1 回答

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

相关问题