可変長引数
Flex のときに 関数パラメータ で大いに感動した記憶がある。
当然のように Java にもあった。
J2SE5 から導入されたとのこと。
概要
メソッドの引数が可変長になる。
つまり、引数の数を不定にできる。
原形(導入前)
元々は引数を配列にすることで対処していた。
String[] player;
player = {"甲子園", "豆タン"};
mizushimaManga(player):
player = {"山田", "里中", "岩鬼", "殿馬"};
mizushimaManga(player):
player = {"球道"};
mizushimaManga(player):
public void mizushimaManga(String[] player) {
for (int i = 0; i < player.length; i++) {
System.out.printIn(player[i]);
}
}
これなら、引数の数がバラバラでも対処できる。
可変長引数
これを簡略化?したものが 可変長引数 。
mizushimaManga("甲子園", "豆タン"):
mizushimaManga("山田", "里中", "岩鬼", "殿馬"):
mizushimaManga("球道"):
public void mizushimaManga(String... player) {
for (int i = 0; i < player.length; i++) {
System.out.printIn(player[i]);
}
}
5行目にある String... player の ... の部分が可変長引数の印。
仕様
- 可変長なので引数の数は 0 でもよい
- 他にも引数があるときは、最期に記述
- 1つのメソッドで1種類しか使えない
- メソッドがオーバーローディングされていて、
引数が固定のメソッドと可変個のメソッドがマッチした場合、
前者が優先される
可変長なので引数の数は 0 でもよい
mizushimaManga():
public void mizushimaManga(String... player) {
for (int i = 0; i < player.length; i++) {
System.out.printIn(player[i]);
}
}
これでも機能する。
何も起こらないけど・・・。
player は length = 0 なのであって、null ではないことに注意。
他にも引数があるときは、最期に記述
mizushimaManga("男どアホウ甲子園", "南波高校", "甲子園", "豆タン"):
mizushimaManga("ドカベン", "明訓高校", "山田", "里中", "岩鬼", "殿馬"):
public void mizushimaManga(String title, String school, String... player) {
for (int i = 0; i < player.length; i++) {
System.out.printIn("「" + title + "」" + school + ":"+ player[i]);
}
}
参考サイト
ひしだまのコンピュータ関連技術メモ:Java 可変長引数
TECHSCORE:6. 可変長引数