Почему (по-видимому) имеет значение, передаю ли я 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 без проблем, но мой до сих пор не компилируется. Единственное различие, которое я вижу, это то, что методы Hemal являются статическими, а мои - нет. Но я действительно не понимаю, почему это должно иметь значение...?
Обновление 2:. У меня был еще один метод foo (Runnable) в моем классе, поэтому диспетчер не мог однозначно выбрать один наиболее специфический метод. (См. Мой комментарий в Гемале, второй ответ.) Спасибо всем за вашу помощь.