java中传递的参数的通用变量数

时间:2013-01-30 15:31:47

标签: java generics

我有一个方法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);

5 个答案:

答案 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);