Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

hasProperty returns null

Tags:

grails

groovy

I am trying to identify if the Groovy (actually Grails domain) class has a property with the hasProperty method. It always returns null. getProperty founds this. What is the difference between those two methods?

Groovy has the javadoc for the hasProperty , but it's not clear at all.

Returns true of the implementing MetaClass has a property of the given name

Note that this method will only return true for realised properties and does not take into account implementation of getProperty or propertyMissing

Is this groovy meta protocol bug?

Groovy 2.0.7 from grails 2.2.1 .

Thanks!

like image 775
2gether Avatar asked May 23 '26 02:05

2gether


1 Answers

hasProperty identifies class properties binded to the metaclass of an object, whereas getProperty can be pretty arbitrary: you can write a method to return whatever you want. How can hasProperty get into that? Executing getProperty? Seems a bit weird to me.

You can override hasProperty so it consider whatever logic is in 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')
like image 63
Will Avatar answered May 25 '26 09:05

Will



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!