【问题标题】:Java: Sending Multiple Parameters to Method [closed]Java:向方法发送多个参数[关闭]
【发布时间】:2013-07-24 02:41:45
【问题描述】:

这是我的场景:

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

案例1:只发送Parameter1

案例2:发送参数组合

案例3:发送所有参数

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

【问题讨论】:

    标签: java methods


    【解决方案1】:

    假设您有打印许多对象的 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);
    

    【讨论】:

    • 如果 2 个字符串和 5 个整数呢??
    • 不叫他们Strings,叫他们Objects。
    • @sureshatta:杰克已经回答了。将 vararge 设为 Object 类型
    • +1 ,只需public static void methodname(Object... params)
    • @sureshatta: thatnks,我会更新它。
    【解决方案2】:

    您可以使用varargs

    public function yourFunction(Parameter... parameters)
    

    另请参阅

    Java multiple arguments dot notation - Varargs

    【讨论】:

    • +1,用于添加文档..
    • 可变参数必须位于参数列表的最后。
    【解决方案3】:

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

    如果参数类型不同,或者更重要的是不会被同等对待,那么你应该使用方法重载:

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

    【讨论】:

    • 所有参数的类型不同,我们不知道要传递的参数个数。
    • 我应该更清楚 - 是否可以将所有参数作为相同的超类型处理,而无需进行类型检查?类型检查不是世界末日,但在大多数情况下是代码味道恕我直言。
    • 所有参数的类型不同,我们不知道要传递的参数个数。示例:method(String a1, String a2, String b1, String b2, .. , .. and some common int, String parameters ) 其中 a1 & a2 为一组,b1 & b2 为另一组,以此类推。但我们不知道必须通过的集合数。
    • 要使用变量 args 来做到这一点,你最终会得到每个 arg 类型为 Object 它们共同的超类型。但我想要表达的是,你将如何区分不同的论点?正如@erencan 建议的那样,您必须传递某种Parameter 对象。
    猜你喜欢
    • 2014-12-12
    • 2013-03-18
    • 1970-01-01
    • 2021-01-28
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多