繁体   English   中英

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

[英]Generic variable number of parameter passing in java

我有一个方法findByProperties(参数... p); 所以它可以采取任何数量的参数。 但我感到困惑的是,如果我不得不调用这个方法,我不知道参数的数量,我该怎么做

假设我有一个带参数的列表,每次调用方法时列表的大小都会改变,我如何将列表中的参数添加到方法调用中?

for(ArrayList<Parameter> p : list){
   findByProperties(p);  //not sure what to do here
 }

编辑:

这是解决方案:

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

你可以这样做:

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

它与以下内容相同:

findProperties(param1, param2);

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

您可以覆盖findByProperties以采用varargs或List<Parameter> 然后可以转发到另一个:

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

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

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

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

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

doSomething(int ... x){}

在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()]));
}

findByProperties(参数... p);

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM