【问题标题】:Passing List<String> to String... parameter将 List<String> 传递给 String... 参数
【发布时间】:2015-11-20 06:55:29
【问题描述】:

我正在努力将字符串列表传递给需要参数“String...”的方法。

谁能帮帮我?

// How to put names into dummyMethod?
List<String> names = getNames();

 public void dummyMethod(String... parameter) {
    mInnerList.addAll(Arrays.asList(parameter));
}

【问题讨论】:

    标签: java android arrays variadic-functions


    【解决方案1】:

    您必须将List&lt;String&gt; 转换为字符串数组才能在dummyMethod 的'varargs' 参数中使用它。您可以将toArray 与一个额外的数组一起用作参数。否则,该方法返回一个Object[],并且不会编译:

    List<String> names = getNames();
    dummyMethod(names.toArray(new String[names.size()]));
    

    【讨论】:

      【解决方案2】:

      您可以执行以下操作:

      dummyMethod(names.toArray(new String[names.size()]) 
      

      这会将列表转换为数组

      【讨论】:

        【解决方案3】:

        在方法内部传递字符串数组 (String[])。您必须将您的列表转换为数组,然后传递它。

        if (names != null) {
            dummyMethod(names.toArray(new String[names.size()])); 
        }
        

        【讨论】:

          【解决方案4】:

          var-arg 实际上接受一个数组,你可以像这样使用它:

          dummyMethod(names.toArray(new String[names.size()]));
          

          这是一个示例代码:

          List<String> names = new ArrayList<>();
          names.add("A");
          names.add("B");
          dummyMethod(names.toArray(new String[names.size()]));
          

          【讨论】:

            【解决方案5】:

            由于你后面将参数解析为List,我建议将方法更改为:

            public void dummyMethod(List<String> parameter) {
                mInnerList.addAll(parameter);
            }
            

            避免额外费用。

            但是,如果您想“按原样”使用此方法,那么您应该这样称呼它:

            dummyMethod(names.toArray(new String[names.size()]));
            

            正如 Glorfindel 在his answer 中建议的那样, 因为这三个点意味着您可以使用许多字符串或字符串数​​组调用该方法(有关详细信息,请参阅this post)。

            【讨论】:

            • toArray() 将返回一个 Object[] - 这不会编译。
            • 谢谢。 toArray() (和一些额外的转换)做到了!带有“String...”参数的方法是库的一部分,所以我试图避免更改它。但这将是我下一次解决它的尝试。
            • @Glorfindel 看到你的答案后,我正在更新我的答案。
            【解决方案6】:

            这是可变参数,为此您应该传递数组。 ArrayList 不起作用。您可以在传递给方法之前将此列表转换为数组。

            String a = new String[names.size];
            list.toArray(a)
            

            【讨论】:

              猜你喜欢
              • 2014-04-06
              • 2015-07-02
              • 2012-12-02
              • 2013-12-04
              • 2019-08-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多