【问题标题】:Initialize array in method argument [duplicate]在方法参数中初始化数组[重复]
【发布时间】:2011-08-30 05:08:45
【问题描述】:

在 PHP 中,您可以执行以下操作:

method(array("a", "b"));

你能在 Java 中初始化一个 String 数组作为方法调用中的参数吗,比如 tihs:

method(new String[] = {"a", "b"});

谢谢!

【问题讨论】:

    标签: java arrays string methods


    【解决方案1】:

    Java 有一个等价的结构:

    import java.util.Arrays;
    
    public class Foo {
       public void method(String[] myStrArray) {
          System.out.println(Arrays.toString(myStrArray));
       }
    
       public static void main(String[] args) {
          Foo foo = new Foo();
          foo.method(new String[]{"hello", "goodbye"}); // **array created inline**
       }
    }
    

    【讨论】:

    • +1。请参阅我的答案以了解如何摆脱那些无关的类型注释。
    • 为什么在 myStrArray 周围多了一组括号。我在没有它的情况下测试了代码,它可以工作。
    • @madkobra:这被称为“错误”,感谢您指出! :)
    【解决方案2】:

    @Hovercraft 的回答展示了如何在 Java 中创建内联数组。

    您可以通过使用一种实用方法(一种利用 Java 的有限类型推断的方法)来消除冗余数组类型注释,从而进一步改进该解决方案。

    代码:

    import java.util.Arrays;
    
    // Utility class
    class Array {
      public static <A> A[] of(A ... elements) {
        return elements;
      }
    }
    
    // Main class
    class Main {
      public static void method(String[] s) {
        System.out.println(Arrays.toString(s));
      }
    
      public static void main(String[] args) {
        method(Array.of("a", "b", "c"));
      }
    }
    

    【讨论】:

    • 我以前从未见过这个。感谢您的教育!
    • @Hovercraft:不客气。 :-)
    【解决方案3】:

    Java 有可变参数方法:

    public void foo(String ... args){
        for(String arg : args){
            // do something
        }
    }
    

    您可以使用零到 n 个参数调用此类方法,编译器会根据参数创建一个数组,例如该方法等价于这个签名:

    public void foo(String[] args)
    

    【讨论】:

      【解决方案4】:

      但是我们有匿名类。

      foo(new Runnable(){public void run(){}});
      

      【讨论】:

      • 您当然可以在 Java 中创建内联数组(如 @Hovercraft 和我自己的回答所证明的那样)。关于匿名类位,这与问题有什么关系?
      • @missing OP 想要的是默认参数。不是方法调用中的 arg
      • @Jigar:我不这么认为。在@Hovercraft 的回答下查看他的评论。他似乎把问题表述错了。我会解决的。
      • @Jigar:如果问题是关于默认参数,答案将涉及方法重载,而不是匿名类。
      • @missing annonymas 类仅针对 F(OP)I 进行了演示 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      • 2019-08-15
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      相关资源
      最近更新 更多