有效的Java Item42,至少有一个输入参数

时间:2015-03-26 03:11:24

标签: java

有效的java 2,Item 42为方法提供了一个优雅的方法,至少有一个参数,如果输入为空,则在编译时失败。代码如下所示min()方法,但是我想知道调用此方法的优雅方法是什么,因为现在简单地传递list将触发编译器错误。

public class OneOrMoreArgs {
    public static int min(int firstArg, int... remaining){
        // but then how do you call the function with a int[] ?
        int _min = firstArg;
        for(int x: remaining){
            if(_min < x ){
                _min = x;
            }

        }
        return _min;

    }
    public static int sum(int... list){
        int s = 0;
        for(int a: list){
            s += a;
        }
        return s;
    }

    public static void main(String []args){
        int[] list = {1,2,3,4,5};

        System.out.println(OneOrMoreArgs.sum(list));
        System.out.println(OneOrMoreArgs.min(list));
    }
}

1 个答案:

答案 0 :(得分:0)

好吧,调用它的优雅方式是

OneOrMoreArgs.min(1, 2, 3, 4, 5);

如果您需要传入一个数组,可以添加一个额外的方法签名,如下所示:

public static int min(int[] args){
    if (args == null || args.length < 1) {
        throw new IllegalArgumentException("... some error message...");
    }

    return min(args[0], Arrays.copyOfRange(args, 1, args.length));
}

需要注意的是:

  1. 此解决方案效率低下,因为它需要复制数组。
  2. 检查是在运行时而不是编译时执行的,因此您将失去第42项提出的解决方案的好处。
  3. 对于您的用例,您最好只声明一个采用数组参数的方法,例如示例中的sum()