我有一个方法findByProperties(Parameter ... p);所以它可以采取任何数量的参数。但我感到困惑的是,如果我不得不调用这个方法,我不知道参数的数量我该怎么做
假设我有一个带参数的列表,每次调用方法时列表的大小都会改变,我如何将列表中的参数添加到方法调用中?
for(ArrayList<Parameter> p : list){
findByProperties(p); //not sure what to do here
}
编辑:
这是解决方案:
Parameter[] paramArray = new ArrayList<Parameter>().toArray(new Parameter[]{});
findByProperties(paramArray);
答案 0 :(得分:4)
您可以这样做:
Parameter[] paramArray = new ArrayList<Parameter>().toArray(new Parameter[]{});
findByProperties(paramArray);
它与以下内容相同:
findProperties(param1, param2);
因为Java在内部将varargs-list转换为数组,所以你也可以传递一个数组。
答案 1 :(得分:3)
您可以覆盖findByProperties
以采用varargs或List<Parameter>
。然后可以转发到另一个:
void findByProperties(Parameter... p) {
findByProperties(Arrays.asList(p));
}
void findByProperties(List<Parameter> p) {
. . .
}
然后,您可以使用findByProperties
个对象的变量参数列表或Parameter
参数调用List<Parameter>
。使用Arrays.asList
不会创建新数组;它只是将现有数组包装在List
实现中;因此,这比从列表中创建新的Parameter[]
数组要少。
答案 2 :(得分:1)
方法可以声明一个从零到多个参数接受的参数,即所谓的var-arg方法。
var-arg参数用sintax类型... name;例如:
doSomething(int ... x){}
答案 3 :(得分:1)
在Java中,您还可以为具有可变参数的方法传入数组。因此,您可以使用参数列表的toArray
方法将List<Parameter>
转换为Parameter[]
,这可以直接传递给findByProperties
:
for (ArrayList<Parameter> p : list){
Parameter[] param = p.toArray(new Parameter[p.size()])
findByProperties(param);
}
如果你还需要在其他地方这样做,你也可以采用一种方便的方法:
public ... findByProperties(List<Parameter> p) {
return findByProperties(p.toArray(new Parameter[p.size()]));
}
答案 4 :(得分:1)
findByProperties(参数... p);
你可以调用findByProperties()方法; (或)findByProperties(p);但不是findByProperties(p,p,p);