我有一个方法,我想扩展(而不是编写一个基本相同的新方法),通过在参数列表的末尾添加未知数量的参数。
如果我这样做,我是否必须更改对该方法的所有调用?我想问题是,未知参数是否包括根本没有传入参数的情况?
例如,如果我有一个方法:
queryFactory(int [] typeArgs, int queryType, int[] ... args){}
我可以致电:
queryFactory(typeArgsInstce, queryTypeInstce)
然后当我需要向查询调用添加参数时:
queryFactory(typeArgsInstce, queryTypeInstce, argsInstce)
其中argsInstce
是包含额外参数的整数数组。
我想编辑这个方法,而不是编写一个几乎完全相同的新方法,除了它有一些参数添加到查询。我将简单地编写另一种方法,如果通过编辑这个方法,我将不得不改变对该方法的所有其他调用。
答案 0 :(得分:6)
public static void main(String[] args) {
method(1); // <- compile error
method(1,2);
method(1,2,3);
method(1,2,3,4);
}
private static void method(int i1, int i2, int...i3) {
// do something
}
所以用语言回答这个问题:我们至少需要2个参数。这会将空数组'i3 []'传递给该方法。 3号及以上参数被视为数组值。
没有区别......
public static void main(String[] args) {
method(new int[]{1}); // <- compile error
method(new int[]{1},2);
method(new int[]{1},2,new int[]{3,4});
method(new int[]{1},2,new int[]{3,4},new int[]{5,6});
}
private static void method(int[] i1, int i2, int[]...i3) {
// do something
}
varargs参数必须是最后一个,因此它不会与第一个数组冲突
答案 1 :(得分:2)
当你问我可以打电话:时,你可以在这里打电话就是例子
public static void main(String[] args) {
int[] i = { 1, 2, 3 };
int[] i1 ={1,1,1,1};
System.out.println("Sum: " + sum(i,2,i1));
System.out.println("Sum: " + sum(i,2));
}
static int sum(int[] numbers1,int num,int[]... numbers2) {
int t[][] = numbers2;
int total = 0;
for (int i = 0; i < t.length; i++) {
for (int j = 0; j < t[i].length; j++) {
System.out.print(t[i][j]);
total += t[i][j];
}
}
for(int test : numbers1)
total+=test;
total+=num;
return total;
}
答案 2 :(得分:0)
我知道您不想更改方法的签名,因为您需要更改该方法的每个调用,因此您可以创建一个方法,其中包含3个包含所有代码的args,并重载相同的方法只有2个args的方法,但是在这个方法中你只用3个args调用方法,最后一个arg将为null。我知道不是你想要的,但是你不会重复代码并改变方法的签名。
public void queryFactory(int [] typeArgs, int queryType, int... args){
// do something
}
public void queryFactory(int [] typeArgs, int queryType){
queryFactory(typeArgs,queryType,null);
}