可変長引数

今度は可変長引数のテスト。

public class Test {

  public static void main(String[] args) {
    VarArgs varArgs = new VarArgsImpl();
    
    //可変長引数の呼出
    varArgs.varArgsTest("AAA", "BBB", "CCC");
    
    String[] strings = {"XXX", "YYY"};
    //配列型でも呼び出せる
    varArgs.varArgsTest(strings);
    
    //配列型で宣言したら、可変長引数では呼び出せない
    //varArgs.varArgsTest(1, "AAA", "BBB", "CCC"); //これはコンパイルエラー
    
    //配列型は配列型で呼び出す
    varArgs.varArgsTest(1, strings);
  }
}


インターフェースでも宣言できる。

public interface VarArgs {

  void varArgsTest(String... strings);
  
  //void varArgsTest(String[] strings); //これはコンパイルエラー
  void varArgsTest(int i, String[] strings);
}


実装クラス。

public class VarArgsImpl implements VarArgs {

  public void varArgsTest(String... strings) {
    for(String string : strings){
      System.out.print(string);
    }
    
    System.out.println();
  }

  public void varArgsTest(int i, String[] strings) {
    for(String string : strings){
      System.out.print(string);
    }
    
    System.out.println();
  }
}


実行結果。

AAABBBCCC
XXXYYY
XXXYYY


とは言っても、実行時例外が増えそうだし、きちんと宣言するか、DTOを使うかなぁ。
あるとしたら、パラメータを渡すとき?
・・・それはCollectionで十分ではないかとも思われるが。