我有一个方法
public boolean findANDsetText (String Description, String ... extra ) {
我希望在其中调用另一个方法并将其extras
传递给它,但我想要向extras添加新元素(Description)。
object_for_text = getObject(find_arguments,extra);
我该如何在java中实现这一点?代码会是什么样子?
我试着用这个问题里的代码,但无法使其工作。
我有一个方法
public boolean findANDsetText (String Description, String ... extra ) {
我希望在其中调用另一个方法并将其extras
传递给它,但我想要向extras添加新元素(Description)。
object_for_text = getObject(find_arguments,extra);
我该如何在java中实现这一点?代码会是什么样子?
我试着用这个问题里的代码,但无法使其工作。
String[] newArr = new String[extra.length + 1];
System.arraycopy(extra, 0, newArr, 0, extra.length);
newArr[extra.length] = Description;
使用 Arrays.copyOf(...)
:
String[] extra2 = Arrays.copyOf(extra, extra.length+1);
extra2[extra.length] = description;
object_for_text = getObject(find_arguments,extra2);
extra
只是一个 String
数组。因此:
List<String> extrasList = Arrays.asList(extra);
extrasList.add(description);
getObject(find_arguments, extrasList.toArray());
您可能需要处理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);
Arrays.asList(extra)
?(请参考Radek的评论) - Greg KopffArrays.asList(extra).add(Description).toArray()
。 - RadekArrayIndexOutOfBoundsException
。 - Raedwaldpublic boolean findANDsetText(String description, String ... extra)
{
String[] newArr = new String[extra.length + 1];
int counter = 0;
for(String s : extra) newArr[counter++] = s;
newArr[counter] = description;
// ...
Foo object_for_text = getObject(find_arguments, newArr);
// ...
}
使用实用函数将数组转换为列表,然后再转回数组,但更短:
// import com.google.common.collect.Lists;
var descriptionAndExtra
= Lists.asList(description, extra).toArray(new String[extra.length + 1]));
就是这样简单...
按照以下方式处理可变参数...
示例:
在您上面的示例中,第二个参数是“String... extra”
因此,您可以像这样使用:
extra[0] = "Vivek";
extra[1] = "Hello";
或者
for (int i=0 ; i<extra.length ; i++)
{
extra[i] = value;
}
使用Java 11作为新List的参数:
List<String> templateArguments = new ArrayList<(Arrays.asList(args));
templateArguments.add(throwable.getMessage());
String.format(template, templateArguments.toArray());