Groovy DSL: Setting properties like functions
Recently I wanted to be able to set properties on an object in a closure without having to use the =
operator.
This is what I didn't want to do:
closure = {
foo = "abc"
bar = "efg"
}
This is what I actually wanted to do:
closure = {
foo "abc"
bar "efg"
}
To do this I implemented the methodMissing function, saw if that object had the property, and if it does, sets that property.
class MyClosure {
def foo
def bar
def methodMissing(String name, args) {
if(this.properties.containsKey(name)) {
setProperty(name,args)
}
}
}
closure = {
foo "abc"
bar "efg"
}
myClosure = new MyClosure()
closure.delegate = myClosure
closure.resolveStrategy = Closure.DELEGATE_FIRST
closure()
myClosure.properties.each{key,value-> println key + ": " + value}
Written by Ryan Moore
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Groovy
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#