Javaのソースで見つけた ...(点3つ) って何?から知る可変長引数
きっかけ
Javaのソースで...(点3つ)の引数を見かけた。
何だ...って?
private static void printArgs(String description, Object... args) {
for (Object object : args) {
System.out.println(object);
}
}
...(点3つ)は可変長引数を表します。
可変長引数は、指定された型の引数を複数指定できます。
引数を指定してみる
// コレでもOK
printArgs("1つ", "複数");
// コレもOK
printArgs("2つ", "複数", "指定");
// コレもOK
printArgs("3つ", "複数", "指定", true);
// コレだってOK
printArgs("なし");
結果
1つ : 複数
2つ : 複数指定
3つ : 複数指定true
なし :
可変長引数は、配列を定義したも同然です。
可変長引数のメソッドをコンパイルすると配列になります。
コンパイル後
public void methodName(String description, Object[] vars)
メソッドの中身.
}
可変長引数は、配列も指定できます。
引数に配列も指定できます
// コレでもOK
methodName("配列", new int[]{1,2,3,4,5});
// コレすらOK
methodName("配列と1つ", new int[]{1,2,3,4,5}, "複数");
可変長引数は、使い方に決まりがあります。
配列を引数にとるオーバーロードはダメ
理由 : コンパイルしたら同じになるから
配列を引数にとるオーバーロードはダメ
public void methodName(String description, Object... vars)
メソッドの中身.
}
public void methodName(String description, Object[] vars)
メソッドの中身.
}
可変長引数は最期に指定しないとダメ
理由:たぶん、どこまでが可変長引数に指定している値かわからなくなるから
可変長引数は最期に指定しないとダメ
// argsでコンパイルエラーになり、Eclipseだとこんなメッセージが出ます。(ざっくり訳 : 可変長引数は最後に書いてね)
// 「The variable argument type Object of the method printArgs must be the last parameter」
private static void printArgs2(Object... args, String description) {
メソッドの中身.
}
可変長引数は1つしか指定できない
理由:たぶん、どこからどこまで1つ目かわかんなくなるし、1つ目の可変長引数が最期に指定されていないことになるから
可変長引数は1つしか指定できない
// args2でコンパイルエラーになり、Eclipseだとこんなメッセージが出ます。
// 「The variable argument type Object of the method printArgs must be the last parameter」
private static void printArgs2(String description, String... args2, Object... args) {
メソッドの中身.
}
// こうするとコンパイルエラーにならない
private static void printArgs2(String description, String[] args2, Object... args) {
メソッドの中身.
}
おまけ
JUnitで引数に配列や可変長引数をとるprivateメソッドをテストする方法 - Qiita
可変長引数の説明をしてくれているサイト様
Author And Source
この問題について(Javaのソースで見つけた ...(点3つ) って何?から知る可変長引数), 我々は、より多くの情報をここで見つけました https://qiita.com/ponsuke0531/items/f0fc923cdbf2ed987013著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .