28

这是我的场景:

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

情况1:只发送Parameter1

案例2:发送参数组合

案例3:发送所有参数

在 Java 中实现这一目标的最佳方法是什么?

4

3 回答 3

52

解决方案取决于问题的答案 - 所有参数是否都将是同一类型,如果是,每个参数都将被视为相同吗?

如果参数类型不同或更重要的是不会被视为相同,那么您应该使用方法重载:

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,但我建议您不要这样做,因为在大多数情况下,它暗示您的设计存在问题。同样,如果您在迭代参数时发现自己在进行类型检查,那么您的设计需要审查。

于 2013-07-24T14:54:09.353 回答
18

假设您有打印许多对象的 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);
于 2013-07-24T14:37:15.607 回答
7

您可以使用可变参数

public function yourFunction(Parameter... parameters)

也可以看看

Java 多参数点表示法 - Varargs

于 2013-07-24T14:38:24.577 回答