次のプログラムが例外をスローするのはなぜですか?
public class MainClass{
public static void main(String[] argv){
callMethod(2);
}
public static void callMethod(Integer... i){
System.out.println("Wrapper");
}
public static void callMethod(int... i){
System.out.println("Primitive");
}
}
メソッド callMethod(Integer[]) は MainClass 型に対してあいまいです
OK、2 つのメソッドのどちらかが機能することはわかりますが (もう一方がコメントアウトされている場合)、プリミティブがメソッドの入力の型と正確に一致しない場合に何が起こるかについて階層があることも知っています。
最初に試みられることは、プリミティブを広げることです。したがって、3 番目の方法があった場合:
public static void callMethod(long i){
System.out.println("long");
}
コードは長く印刷されます
2 つ目は、プリミティブをボックス化することです。したがって、整数を受け取るメソッドがあれば、それが呼び出されます。
3 番目の優先順位は var-args です。
上記の優先順位に基づいて、2番目の優先順位が当てはまると思います。int が Integer にラップされ、 (Integer...) が呼び出されることを期待します。しかし、もちろん、これは起こりません。代わりに、例外がスローされます。
この例で優先順位付けが適用されない理由を見て、説明できる人はいますか?
乾杯!