Почему (очевидно) имеет значение, передаю ли я null
в качестве аргумента напрямую или передаю Object
, которому я присвоил значение null
?
Object testVal = null;
test.foo(testVal); // dispatched to foo(Object)
// test.foo(null); // compilation problem -> "The method foo(String) is ambiguous"
public void foo(String arg) { // More-specific
System.out.println("foo(String)");
}
public void foo(Object arg) { // Generic
System.out.println("foo(Object)");
}
Другими словами, почему второй (закомментированный) вызов foo(...)
не отправляется в foo(Object)
?
Обновление: я использую Java 1.6. Я без проблем скомпилировал код Hemal, но мой все равно не компилируется. Единственная разница, которую я вижу, заключается в том, что методы Хемаля являются статическими, а мои — нет. Но я действительно не понимаю, почему это должно иметь значение...?
Обновление 2: решено. В моем классе был еще один метод foo(Runnable), поэтому диспетчер не мог однозначно выбрать единственный наиболее конкретный метод. (См. мой комментарий во втором ответе Хемаля.) Спасибо всем за вашу помощь.