Groovy – delegação usando enums e encerramentos

O Groovy devolve a diversão ao Java. Aqui está um dos truques que uso para delegar ações com base em valores enum.

enum Super {

BATMAN
({arg1 ->
println
"I live in $arg1 city"
}),
SUPERMAN
({arg1 ->
println
"I was born in $arg1"
}),
SHAKTIMAN
({arg1 ->
println
"I live in $arg1 city"
});

Closure cl

Super(Closure cl) {
this.cl = cl
}

def address(def arg){
return cl.call(arg)
}
}

agora você pode chamar o endereço do método neste enum.

Super.SUPERMAN.address("Krypton");
Super.BATMAN.address("Gotham");