を呼び出すには、次のコード例を考えてみましょう:Javaのオーバーロード:参照を曖昧
public class TestClass {
public void doSth(String str, String l, Object... objects) {
System.out.println("A");
}
public void doSth(String str, Object... objects) {
System.out.println("B");
}
}
私は今、私が期待した結果A
を得るnew TestClass().doSth("foo", "bar")
を呼び出すとき。私はプリミティブ型にパラメータl
をchagingすることにより、第1の方法のメソッドシグネチャを変更した場合でも:new TestClass().doSth("foo", 2L)
を呼び出す
public class TestClass {
public void doSth(String str, long l, Object... objects) {
System.out.println("A");
}
public void doSth(String str, Object... objects) {
System.out.println("B");
}
}
はreference to call ambiguous
コンパイル時エラーを生成します。
私は今、いくつかの時間のための1つについて考えともthis stackoverflow questionに相談が、私はこの問題が発生した理由を理解することができませんでした。私の意見では、doSth("foo", 2L)
はdoSth(String string, long l, Object... obj)
シグニチャに特有のものであり、コンパイラもこの結論に至るはずです。
明らかにプリミティブはオブジェクトでもありますか? –
@blahfunkは、はい、彼らが頭に浮かぶ唯一の説明は、[オートボクシング](https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html)ですが、これがあるべき – Andrew
ラップすることができます1つの変換ステップは、メソッドの基本バージョンよりも「遠く」離れています。 – Turing85