如何向Varargs添加新元素?

Rad*_*dek 6 java variadic-functions

我有一个方法

public boolean findANDsetText  (String Description, String ... extra ) {
Run Code Online (Sandbox Code Playgroud)

在里面我想调用另一个方法并传递它,extras但我想添加新的元素(描述)到额外的.

     object_for_text = getObject(find_arguments,extra);
Run Code Online (Sandbox Code Playgroud)

我怎么能在java中这样做?代码会是什么样的?

我厌倦了容纳这个问题的代码,但无法使其工作.

Jon*_*len 12

为了扩展这里的一些其他答案,可以更快地完成阵列复制

String[] newArr = new String[extra.length + 1];
System.arraycopy(extra, 0, newArr, 0, extra.length);
newArr[extra.length] = Description;
Run Code Online (Sandbox Code Playgroud)


len*_*rje 5

使用Arrays.copyOf(...)

String[] extra2 = Arrays.copyOf(extra, extra.length+1);
extra2[extra.length] = description;

object_for_text = getObject(find_arguments,extra2);
Run Code Online (Sandbox Code Playgroud)


tsm*_*tsm 2

extra只是一个String数组。像这样:

List<String> extrasList = Arrays.asList(extra);
extrasList.add(description);
getObject(find_arguments, extrasList.toArray());
Run Code Online (Sandbox Code Playgroud)

您可能需要弄乱extrasList.toArray().

你可以更快但更详细:

String[] extraWithDescription = new String[extra.length + 1];
int i = 0;
for(; i < extra.length; ++i) {
  extraWithDescription[i] = extra[i];
}
extraWithDescription[i] = description;
getObject(find_arguments, extraWithDescription);
Run Code Online (Sandbox Code Playgroud)

  • 这将不再有效(使用 Java 8u144 进行测试),因为 Arrays.asList() 返回一个固定大小的列表。建议使用Arrays.copyOf(...)。 (4认同)