Защо (очевидно) има разлика дали подавам 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) в моя клас, така че диспечерът не можеше недвусмислено да избере единствения най-специфичен метод. (Вижте коментара ми във втория отговор на Хемал.) Благодаря на всички за помощта.