我是Java的初学者。有一种方法:
public void method (int param1, int param2, int param3, int param4)
取决于具体情况,我有时需要将参数传递给[param1]或[param2,param4],这取决于XML设置。但简单地传递(0,desiredValue1,desiredValue2,0)并不是那么简单 - 最好的方法是传递一个关联数组来定义参数名称及其值。我听说这种工作完成了反思。
答案 0 :(得分:3)
不反思。使用重载:
public void method (int param1)
public void method (int param2, int param4)
如果你真的需要超过4种,直到所有15种组合,请考虑其他选择。
public void method (Integer param1, Integer param2, Integer param3, Integer param4)
这将允许您为缺少的参数传递null。
地图是另一种选择。
更好地解析和解释XML可能会带来更简单的解决方案。
<强>后来强>
当然,您可以使用某种标记的&#34;存储参数。
class Parameter<T> {
String name;
T value; ...
Parameter( String name, T value ){...}
}
void method( Parameter<?>... parameters ){
for( Parameter<?> par: parameters ){
switch( par.getName() ){
case "param1": //...
//...
}
}
}
method( new Parameter<Integer>( "param1", 42 ),
new Parameter<Double>( "param3", 3.14 ) );
如果您不需要通用性,只需在所有相关位置使用int。
答案 1 :(得分:1)
你可以传递数组:
public void method (int[] params)
这仍然需要您分配n个元素的数组,其中n是潜在参数的最大数量,并且对于大的n可能是浪费。它还要求您有一个默认的空值(例如0),它告诉您数组中的某个位置没有值。
int[] params = new int[13];
params[0] = value1;
params[3] = value4;
params[4] = value5;
method (params);
或者您可以传递一个List:
public void method (List<Integer> params)
或者您可以传递地图:
public void method (Map<Integer,Integer> params)
如果您有大量可选参数,并且您只想传递其中几个参数,后者将是最有效的:
Map map = new HashMap<Integer,Integer>();
map.put (5, value5);
map.put (13, value13);
method (map);
答案 2 :(得分:1)
在这种情况下,您可以使用地图实例:
public void method(final Map<String, Integer> params) {
// code omitted
}
在方法体中,您将有一些if-else
语句来提取和使用已传递的参数。
更新。:可能更好的方法是使用枚举中的地图,用于将参数命名为实际值:
enum MethodParameters { Param1, Param2, Param3 };
public void method(final Map<MethodParameters, Integer> params) {
// code omitted
}
这样您就不需要多次编写参数名称,因此您不会收到复制粘贴错误。
答案 3 :(得分:1)
与使用Map类似,您可以使用varargs并自行解析,尽管使用重载函数或更好地解析XML会更好。我会非常小心这样做或Map方式;你应该对传入的参数进行大量的错误检查。
private void printParams(Object... params) {
for (Object param : params) System.out.println(param);
}