Item 53可変パラメータは慎重に使用してください

5478 ワード

「可変パラメータ」(varargs)メールでは、指定したタイプのパラメータを0つ以上受信できます.
可変パラメータメソッドを呼び出すと、まずパラメータの個数と長さが同じ配列を作成し、パラメータをその配列に格納してから、可変パラメータメソッドに渡します.
入力intパラメータの和を計算する可変パラメータメソッドを次に示します.sum(1,2,3)は6を返し,sum()は0を返す.
コード53-1簡単な可変パラメータの使用例
static int sum(int... args) {
    int sum = 0;
    for (int arg : args)
        sum += arg;
    return sum;
}
1つまたは複数のコード53−2パラメータを必要とする可変パラメータ方法であって、エラー例を実装する!
static int min(int... args) {
    if (args.length == 0)
        throw new IllegalArgumentException("인수가 1개 이상 필요합니다.");
    int min = args[0];
    for (int i = 1; i < args.length; i++)
        if(args[i] < min)
            min = args[i];
    return min;
}
この方法にはいくつかの問題があります.最も深刻な問題は、コンパイルタイプではなく0個の引数のみを入力すると、実行タイプが失敗することです.
コードも乱れています.argsを明示的に検証し、minの初期値をintegerに設定する必要があります.MAX VALUEに設定しない限り、for-each文は使用できません.
もっといい方法がある.
次のコードのように、2つのパラメータを受ければいいです.すなわち,1番目は通常パラメータ,2番目は可変パラメータを受け入れると,前の問題は消える.
static int min( int firstArg, int... remainingArgs) {
    int min = firstArg;
    for (int agr: remainingArgs)
        if(arg < min)
            min = arg;
    return min;
}
可変パラメータは、パラメータの数が不確定な場合に便利です.
性能に敏感な場合、可変パラメータが障害になる可能性があります.
可変パラメータメソッドは、呼び出すたびに配列を再割り当てして初期化します.幸いなことに、この費用は負担できませんが、可変パラメータの柔軟性が必要な場合に選択できる良いモードがあります.

コアの整理


買収数が一定でない方法を定義する必要がある場合は、可変買収を使用する必要があります.
  • メソッドを定義する場合は、必要なパラメータを可変パラメータの前に配置し、可変パラメータを使用する場合はパフォーマンスの問題を考慮します.