Slide 40
Slide 40 text
#JavaOne #groovylang @CedricChampeau
Traits : chaining with runtime coercion
class BaseHandler implements MessageHandler {
@Override
void onMessage(final String tag, final Map, ?> payload) {
println "Received [$tag] from base handler"
}
}
trait UpperCaseHandler implements MessageHandler {
void onMessage(String tag, Map, ?> payload) {
super.onMessage(tag.toUpperCase(), payload)
}
}
trait DuplicatingHandler implements MessageHandler {
void onMessage(String tag, Map, ?> payload) {
super.onMessage(tag, payload)
super.onMessage(tag, payload)
}
}
def h = new BaseHandler()
h = h.withTraits(UpperCaseHandler, DuplicatingHandler, ObserverHandler)
h.onMessage('runtime', [:])