3 ms·
Yeah, Java doesn't do multimethods (i.e., method dispatch based on runtime argument types). If Class X has two methods: void foo(Object i); void foo(Integ
by smanek 17y ago
Yeah, Java doesn't do multimethods (i.e., method dispatch based on runtime argument types).
If Class X has two methods:
void foo(Object i);
void foo(Integer i);
then:
Object test = new Integer(4);
X x = new X();
x.foo(test);
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).
- d0mine 17y agoYou're right. It calls 'void foo(Object o);' 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)"; } }