2

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

5 回答 5

4

你可以这样做:

Parameter[] paramArray = new ArrayList<Parameter>().toArray(new Parameter[]{});
findByProperties(paramArray);

这与以下内容相同:

findProperties(param1, param2);

因为 Java 在内部将 varargs-list 转换为数组,所以您也可以传递数组。

于 2013-01-30T15:46:32.847 回答
3

您可以覆盖findByProperties以采用可变参数或List<Parameter>. 然后一个可以中继给另一个:

void findByProperties(Parameter... p) {
    findByProperties(Arrays.asList(p));
}

void findByProperties(List<Parameter> p) {
    . . .
}

然后,您可以findByProperties使用对象的可变参数列表ParameterList<Parameter>参数进行调用。usingArrays.asList不会创建新数组;它只是将现有数组包装在一个List实现中;因此,这比Parameter[]从列表中创建一个新数组要少。

于 2013-01-30T15:39:07.790 回答
1

方法可以声明一个接受零到多个参数的参数,即所谓的 var-arg 方法。

var-arg 参数使用 sintax 类型... 例如:

doSomething(int... x){}

于 2013-01-30T15:37:36.433 回答
1

findByProperties(参数... p);

你可以调用方法 findByProperties(); (或) findByProperties(p);

但不是 findByProperties(p,p,p);

于 2013-01-30T15:51:33.863 回答
1

在 Java 中,您还可以为具有可变参数的方法传入一个数组。所以可以使用toArray参数列表的方法将 转换List<Parameter>为 a 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()]));
}
于 2013-01-30T15:39:02.573 回答