【发布时间】:2013-07-24 02:41:45
【问题描述】:
这是我的场景:
我必须调用一个方法。设参数为: Parameter1, Parameter2, .. , .. , 参数 N 但是要发送到方法的参数可能会在每种情况下发生变化。
案例1:只发送Parameter1
案例2:发送参数组合
案例3:发送所有参数
在 Java 中实现这一目标的最佳方法是什么?
【问题讨论】:
这是我的场景:
我必须调用一个方法。设参数为: Parameter1, Parameter2, .. , .. , 参数 N 但是要发送到方法的参数可能会在每种情况下发生变化。
案例1:只发送Parameter1
案例2:发送参数组合
案例3:发送所有参数
在 Java 中实现这一目标的最佳方法是什么?
【问题讨论】:
假设您有打印许多对象的 void 方法;
public static void print( Object... values){
for(Object c : values){
System.out.println(c);
}
}
上面的例子我使用 vararge 作为参数,它接受从 0 到 N 的值。
来自 cmets:如果 2 个字符串和 5 个整数呢??
答案:
print("string1","string2",1,2,3,4,5);
【讨论】:
Strings,叫他们Objects。
public static void methodname(Object... params)
【讨论】:
解决方案取决于问题的答案 - 所有参数都将是同一类型吗?如果是,每个参数都将被同等对待吗?
如果参数类型不同,或者更重要的是不会被同等对待,那么你应该使用方法重载:
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)
{
...
}
}
}
显然,当使用变量 args 时,您可以通过索引访问每个 arg,但我建议您不要这样做,因为在大多数情况下它暗示您的设计存在问题。同样,如果您在迭代参数时发现自己在进行类型检查,那么您的设计需要审查。
【讨论】:
Object 它们共同的超类型。但我想要表达的是,你将如何区分不同的论点?正如@erencan 建议的那样,您必须传递某种Parameter 对象。