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)");
}
つまり、(コメントアウトされた) への 2 番目の呼び出しが にfoo(...)
ディスパッチされないのはなぜfoo(Object)
ですか?
更新: Java 1.6 を使用しています。Hemal のコードは問題なくコンパイルできましたが、私のコードはまだコンパイルできません。私が見る唯一の違いは、Hemal のメソッドは静的であるのに対し、私のメソッドはそうではないということです。しかし、なぜこれが違いを生む必要があるのか 本当にわかりません...?
更新 2:解決済み。クラスに別のメソッド foo(Runnable) があったため、ディスパッチャは最も具体的なメソッドを 1 つだけ選択することができませんでした。(Hemal の 2 番目の回答の私のコメントを参照してください。) ご協力いただきありがとうございます。