Envio de método Java com argumento nulo
Por que (aparentemente) faz diferença se eu passonull
como argumento diretamente ou passe umObject
que eu atribuí ovalor 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)");
}
Em outras palavras, por que a segunda chamada (comentada) parafoo(...)
não enviado parafoo(Object)
?
Atualizar: Eu uso o Java 1.6. Eu poderia compilar o código de Hemal sem problemas, mas o meu ainda não é compilado. A única diferença que vejo é que os métodos de Hemal são estáticos enquanto os meus não são. Mas eu realmente não vejo por que isso deve fazer a diferença ...?
Atualização 2: Resolvido. Eu tinha outro método foo (Runnable) na minha classe, então o despachante não pôde selecionar sem ambiguidade o método mais específico. (Veja meu comentário na segunda resposta de Hemal.) Obrigado a todos pela ajuda.