2013-07-24 87 views
12

这是我的方案:Java:发送多个参数到方法

我必须调用一个方法。让参数为: 参数1,参数2,..,..,参数N 但是发送到该方法的参数可能会在每种情况下发生变化。

案例1:只有参数1被送到

案例2:参数的组合被发送

案例3:所有参数发送

什么是最好的方式在Java中实现这一点?

回答

23

的解决方案取决于日这个问题的答案是 - 所有的参数都是相同的类型,如果是这样的话,每个参数都是相同的?

如果参数不是同一类型或者更重要的是不会得到相同的待遇,那么你应该使用重载方法:

public class MyClass 
{ 
    public void doSomething(int i) 
    { 
    ... 
    } 

    public void doSomething(int i, String s) 
    { 
    ... 
    } 

    public void doSomething(int i, String s, boolean b) 
    { 
    ... 
    } 
} 

然而,如果每个参数的类型相同,将在被处理以同样的方式,那么你可以使用变量ARGS功能中的Java:

public MyClass 
{ 
    public void doSomething(int... integers) 
    { 
    for (int i : integers) 
    { 
     ... 
    } 
    } 
} 

显然使用可变ARGS你可以访问每一个通过其索引精氨酸,但我会建议对本作中,它暗示了一个问题,大多数情况下,当你的设计。同样,如果您在迭代参数时发现自己正在进行类型检查,那么您的设计需要审查。

+0

所有参数都不是相同的类型,我们不知道将传递的参数数量。 –

+1

我应该更清楚 - 可以将所有参数作为相同的超类型进行处理,而不需要进行类型检查?类型检查不是世界的尽头,但在大多数情况下是代码味道不明。 –

+0

所有参数都不是相同的类型,我们不知道将传递的参数数量。 示例: 方法(字符串a1,字符串a2,字符串b1,字符串b2,..,..和一些常见的int,字符串参数) 其中a1&a2是一个集合,b1&b2另一个集合等等。但我们不知道必须通过的套数。 –

9

假设你有void方法打印许多对象;

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); 
+0

如果2个字符串和5个整数? –

+0

而不是叫他们'字符串'只是叫他们'对象'。 – jrad

+0

@sureshatta:杰克已经回答。将变容值作为对象类型 – Azad