这是我的情景:
我需要调用一个方法,参数有: Parameter1、Parameter2、……、ParameterN, 但每种情况下所需发送到该方法的参数可能会发生变化。
情况一:仅发送 Parameter1
情况二:发送一组参数组合
情况三:发送所有参数
在Java中,最好的实现方式是什么?
解决方案取决于一个问题的答案——所有参数是否都是相同的类型,如果是,那么每个参数会被同等对待吗?
如果参数不是相同的类型,或者更重要的是,不会被同等对待,则应使用方法重载:
public class MyClass
{
public void doSomething(int i)
{
...
}
public void doSomething(int i, String s)
{
...
}
public void doSomething(int i, String s, boolean b)
{
...
}
}
但是,如果每个参数都是相同类型并且将以相同方式处理,则可以在Java中使用变量args特性:
public MyClass
{
public void doSomething(int... integers)
{
for (int i : integers)
{
...
}
}
}
显然,当使用可变参数时,您可以通过其索引访问每个参数,但我建议不要这样做,因为在大多数情况下,这暗示着设计上的问题。同样,如果您发现自己在迭代参数时进行类型检查,则需要审查设计。
假设您有一个打印多个对象的无返回值方法;
public static void print( Object... values){
for(Object c : values){
System.out.println(c);
}
}
在上面的例子中,我使用了vararge作为参数,它接受从0到N的值。
来自评论:那如果是2个字符串和5个整数呢?
答案:
print("string1","string2",1,2,3,4,5);
public static void methodname(Object... params)
。 - Suresh Atta
Object
类型的共同超类型。但我想表达的是,您将如何区分不同的参数集?您必须像@erencan建议的那样传递某种Parameter
对象。 - Nick Holt