Skip to content

Instantly share code, notes, and snippets.

@stormbeta
Created April 2, 2015 22:25
Show Gist options
  • Save stormbeta/3f7f823613c01227e058 to your computer and use it in GitHub Desktop.
Save stormbeta/3f7f823613c01227e058 to your computer and use it in GitHub Desktop.
Dynamic dispatch weirdness in groovy
//TEST DYNAMIC DISPATCH
trait TraitOne { }
abstract class TypeOne implements TraitOne { }
class TypeTwo extends TypeOne { }
def method(TraitOne _) { return 'traitOne' }
def method(TypeOne _) { return 'typeOne' }
def method(TypeTwo _) { return 'typeTwo' }
def method2(TraitOne _) { return 'traitOne' }
def method2(TypeOne _) { return 'typeOne' }
def method3(TypeOne _) { return 'typeOne' }
def object = new TypeTwo()
println "method1: ${method(object)}"
println "method2: ${method2(object)}"
println "method3: ${method3(object)}"
abstract class TypeThree {}
trait TraitTwo {}
class TypeFour extends TypeThree implements TraitTwo {}
def method4(TypeThree _) { return 'typeThree' }
def method4(TraitTwo _) { return 'traitTwo' }
def method4(TypeFour _) { return 'typeFour' }
def method5(TypeThree _) { return 'typeThree' }
def method5(TraitTwo _) { return 'traitTwo' }
def method6(TraitTwo _) { return 'traitTwo' }
def method7(TypeThree _) { return 'typeThree' }
def object2 = new TypeFour()
println "method4: ${method4(object2)}"
println "method5: ${method5(object2)}"
println "method6: ${method6(object2)}"
println "method7: ${method7(object2)}"
//OUTPUT:
//method1: typeTwo
//method2: traitOne
//method3: typeOne
//method4: typeFour
//method5: traitTwo
//method6: traitTwo
//method7: typeThree
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment