import junit.framework.TestCase;
public class TestMultimethods extends TestCase {
public void test() {
Object test = new Integer(4);
X x = new X();
assertEquals(x.foo(test), "foo(Object)");
}
}
class X {
String foo(Object i) { return "foo(Object)"; }
String foo(Integer i) { return "foo(Integer)"; }
}
Comments
Yeah, Java doesn't do multimethods (i.e., method dispatch based on runtime argument types).
If Class X has two methods:
then: will invoke 'void foo(Object o);' based on the compile time type of test.Java does do dispatch based on the runtime type of X - but it is quite limiting once you are used to having proper multiple dispatch at your disposal.
(caveat: not in front of a javac - this is from memory).
You're right. It calls 'void foo(Object o);'