重複の可能性:
NULLパラメーターのメソッドオーバーロード
次のコードはコンパイルされ、正常に動作します。
public class Main
{
public void temp(Object o)
{
System.out.println("The method with the receiving parameter of type Object has been invoked.");
}
public void temp(String s)
{
System.out.println("The method with the receiving parameter of type String has been invoked.");
}
public void temp(int i)
{
System.out.println("The method with the receiving parameter of type int has been invoked.");
}
public static void main(String[] args)
{
Main main=new Main();
main.temp(null);
}
}
このコードでは、呼び出されるメソッドは、タイプのパラメーターを受け入れるメソッドです。String
ドキュメントによると。
複数のメンバーメソッドがアクセス可能であり、メソッド呼び出しに適用できる場合は、実行時メソッドディスパッチの記述子を提供するために1つを選択する必要があります。Javaプログラミング言語は、最も具体的な方法が選択されるという規則を使用します。
しかし、プリミティブのパラメーターを受け入れるコード内のメソッドの1つが、次のようなint
ラッパータイプのパラメーターを受け入れるように変更されたときはわかりません。Integer
public void temp(Integer i)
{
System.out.println("The method with the receiving parameter of type Integer has been invoked.");
}
コンパイル時エラーが発行されます。
tempへの参照があいまいで、methodoverloadingpkg.Mainのメソッドtemp(java.lang.String)とmethodoverloadingpkg.Mainのメソッドtemp(java.lang.Integer)の両方が一致します
この特定のシナリオでは、プリミティブデータ型でメソッドをオーバーロードすることが合法であるのに、対応するラッパー型ではそうではないように見えるのはなぜですか?