可変長引数は最後の候補
出力はどれか。
public class Main {
static void m(long x) { System.out.println("long"); }
static void m(int... x) { System.out.println("varargs"); }
public static void main(String[] args) {
m(1);
}
}
- A
long - B
varargs - C コンパイルエラーになる
- D 実行時に例外が発生する
正解と解説を見る
正解: A
- A: 可変長引数は最後の候補なので、int → long の拡大変換で呼べる m(long) が選ばれます。
- B: 可変長引数のメソッドは、ほかに当てはまるメソッドが無いときだけ選ばれます。
- C: 候補が決まるのでコンパイルできます。
- D: オーバーロードの選択はコンパイル時に決まり、例外にはなりません。
ポイント
- 可変長引数のメソッドは、ほかに当てはまるものが無いときの最後の候補です。int → long の拡大変換が優先されます。