JVMは、一致しないパラメータを含むメソッドをオーバーロードすると、引数よりも小さい引数を持つメソッドを常に使用します。var-argsによるメソッドのオーバーロード - ボクシングと拡大と組み合わせた
私は次の2つの例で上記を確認している:
拡幅:
class ScjpTest{
static void go(int x){System.out.println("In Int");}
static void go(long x){System.out.println("In long");}
public static void main (String[] args){
byte b = 5;
go(b);
}
}
ボクシングをintに広がっバイト:整数
にclass ScjpTest{
static void go(Integer x){System.out.println("In Int");}
static void go(Long x){System.out.println("In Long");}
public static void main (String[] args){
int b = 5;
go(b);
}
}
箱入りintです上記の両方の例は正しい "In Int"を出力します。次の例に示すように、状況は上記
class ScjpTest{
static void go(int... x){System.out.println("In Int");}
static void go(long... x){System.out.println("In lInt");}
public static void main (String[] args){
byte b = 5; //or even with: int b = 5
go(b);
}
}
VAR-引数を伴うとき、私はかかわらず、混乱しています、次のエラー生成:
ScjpTest.java:14: reference to go is ambiguous, both method go(int...) in ScjpTest and method go(long...) in ScjpTest match
go(b);
^
1 error
をなぜそれが以前と同じルールを適用しません。例?バイトよりも大きい最小値であるため、バイトをintに拡大しますか?
オンJava 7では、最後の例がうまくいきます。 – toto2