You can implement methodMissing
in the class as below to answer your last question:
class Greeter {
def sayHello() {
//this.metaClass.greeting = { System.out.println "Hello!" }
greeting()
goodNight()
}
def methodMissing(String name, args){
if(name == 'greeting'){
println "Hello!"
} else
println "Good Night"
}
}
new Greeter().sayHello()
Also note that ==
in groovy actually means equals()
(that is value comparison) if you want to compare identity then is()
can be used like
a.is(b) //Corresponds to == in Java
a == b //Corresponds to equals() in Java
UPDATE
Can use metaClass as below
Greeter.metaClass.greeting = { println "Hello"}
def greet = new Greeter()
//or
//greet.metaClass.greeting = { println "Hello"}
greet.sayHello()