假设我想检查方法的所有参数是否消极。我可以这样做:
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");
}
}
}
但是,我真的不喜欢这种方法。有没有办法通过订单编号来引用方法参数?另外,有没有办法引用原语并检查否定性而不参考其确切类型?
答案 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);
}