将 List<String> 传递给 String... 参数

Passing List<String> to String... parameter

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

有人能帮帮我吗?

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

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

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

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

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

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

您可以执行以下操作:

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

这会将列表转换为数组

您必须将 List<String> 转换为字符串数组才能在 dummyMethod 的 'varargs' 参数中使用它。您可以使用 toArray 和一个额外的数组作为参数。否则,方法 returns 和 Object[] 将无法编译:

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

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

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

避免额外费用。

但是,如果你想使用这个方法"as it is",那么你应该这样调用它:

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

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

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()]));