Vararg(Java)
可変引数(Varargs)
VarargsはVariable-length arguments(可変長の引数)の意味で、コンストラクタやメソッドに渡す引数の個数が特定できない場合に使用できます。Varargsのサンプルプログラム
Genericsのところで使ったサンプルを改造してみます。<SomethigToDo2.java>
package beans;
public class SomethigToDo2<E extends Action>{
public SomethigToDo2() {
super();
}
public void justDoIt(E... arg){ // (A) E型の可変引数
for(E obj : arg){ // (B)
obj.doIt();
}
}
}
可変引数の定義は簡単で、(A)のところのように引数を表す括弧()内に「型... 変数名」とするだけです。
このとき、(考えてみれば当たり前のルールですが)
可変引数は、引数を定義する際の最後になるようにしなければいけません。
たとえば、
justDoIt(int i, E... arg){はOKですが、
justDoIt(E... arg,int i){はNGです。どこまでがEかわからなくなるので当たり前ですよね。
また、引数は内部的に配列にいれられるので、(B)のような拡張for文で取り出すことができます。
それでは、SomethigToDo2.javaを呼び出すプログラムを書いて見ましょう。
package test;
import beans.Eat;
import beans.SomethigToDo2;
public class ExampleVararg1 {
public static void main(String[] args) {
SomethigToDo2<Eat> _act = new SomethigToDo2<Eat>();
_act.justDoIt(new Eat("バナナ"),new Eat("イチゴ")); // (a)
}
}
この実行結果は以下のようになります。
バナナを食べました。
イチゴを食べました。
(a)の部分で可変引数を渡していますが、ここを
_act.justDoIt(new Eat("バナナ"),new Eat("イチゴ"),new Eat("ミカン"));
とすると
バナナを食べました。
イチゴを食べました。
ミカンを食べました。
という結果が出力されます。
2007年02月28日(水) 16:45:09 Modified by wanderingse