参考Java方法的参数

时间:2014-12-23 00:40:31

标签: java methods parameters reference arguments

假设我想检查方法的所有参数是否消极。我可以这样做:

public class test{
    public test(double a, double b, int c, int d, long e ,  long f){

        // check parameter correctness
        checkNegParam(a,"1");
        checkNegParam(b,"2");
        checkNegParam(c,"3");
        checkNegParam(d,"4");
        checkNegParam(e,"5");
        checkNegParam(f,"6");   
    }

    private void checkNegParam(double number, String order) {
        if (number < 0) {
            throw new IllegalArgumentException("Argument"+ order +" is negative");
        }
    }
}

但是,我真的不喜欢这种方法。有没有办法通过订单编号来引用方法参数?另外,有没有办法引用原语并检查否定性而不参考其确切类型?

3 个答案:

答案 0 :(得分:2)

我建议你坚持使用命名参数。

如果在末尾以外的位置添加新的(可能为正)参数,请考虑其影响,并忘记更新检查以反映这可能是正值。你会浪费很多时间来调试它。

如果其他人必须使用/编写此代码,那么使用数字会模糊代码的目的,他们很难理解你在做什么。

答案 1 :(得分:0)

如果你可以在数组或任何集合中获取所有参数,那么你可以循环遍历它们并以这种方式检查:

public class test{
    public void test(double[] args) throws IllegalArgumentException{
        for(int i = 0; i < args.length; i++){
            if(args[i] < 0) throw new IllegalArgumentException("Argument " + (i + 1) + " is negative");
        }
    }
}

如果你想保留对这个方法的调用而不自己构建数组/集合,你可以让java用变量args为你做这个。

public class test{
    public void test(Double... args) throws IllegalArgumentException{
        for(int i = 0; i < args.length; i++){
            if(args[i] < 0) throw new IllegalArgumentException("Argument " + (i + 1) + " is negative");
        }
    }
}

答案 2 :(得分:0)

以下代码可能会帮助您找到负面参数的更一般方法:

private void assertNotNegative(Number... numbers) {
    for (int i = 0; i < numbers.length; i++) {
        if (Math.signum(numbers[i].doubleValue()) < 0) {
            throw new IllegalStateException("Negative argument " + numbers[i] + ", index: " + i);
        }
    }
}

要调用它,只需调用:

public test(double a, double b, int c, int d, long e ,  long f) {
    assertNotNegative(a, b, c, d, e, f);
}