[Java] ... イラン?(可変パラメータ)


他の言語よりもJavaに詳しいと思っていましたが、パラメータには「...」このような不可知な記号に直面している.(まだまだです…ㅠ)
public DiscountPolicy(DiscountCondition ... conditions){}
//오브젝트(조영호) P.51
本の中で首都コードのように簡単に表現したいだけだと思っていましたが、
繰り返し使う疑問を抱えて、Googleゲームを試してみました.
可変因子とは?
これはjdk 1.5から動的指定パラメータをサポートする方法です.
まず,この概念はJava過負荷を背景に導入された.
オーバーロードとは、同じ機能を持つ方法のパラメータが異なる場合にのみ使用できる概念である.したがって、メソッドの名前は同じですが、パラメータのタイプや数が異なるだけです.
同じタイプのパラメータの数だけが異なると仮定します.
String printname(String name1);
String printname(String name1, String name2);
String printname(String name1, String name2, String name3);
コードの重複を極度に嫌うベテランプログラマーがこの問題を解決しないはずがない.
String printname(String ... names);
もちろん,集合と配列を用いてこの問題を解決することもできる.
String printname(Vector<String> names); //컬렉션
String printname(String[] names); //배열
また,可変因子は最終的に内部配列によって伝達されるので,この解決法から非常に逸脱する方法ではない.

注意事項


可変因子を使用する場合の注意点は2つあります.
1)複数の可変パラメータを使用する場合、最後に可変パラメータをパラメータとして入れる.
String printname(String work, String ... names); 
2)可変パラメータの使用方法をオーバーロードする場合、区別が難しい場合があります.
String printname(String ... names); //1
String printname(String work, String ... names); //2 

// 함수 호출시
printname("조세호", "유재석"); //1 호출 시도
printname("유퀴즈", "조세호", "유재석"); //2 호출 시도
2呼び出そうとするコードでは、作業(「問題あり」)もStringなので、両者を区別するのは難しい.
したがって、可変パラメータを使用する方法は、過度にロードしないほうがよい.