gpt4 book ai didi

java - 如何将基元数组作为可变参数传递?

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:58 27 4
gpt4 key购买 nike

我一直在尝试将基元数组(在我的例子中是 int[])传递给具有可变参数的方法。

假设:

    // prints: 1 2
System.out.println(String.format("%s %s", new String[] { "1", "2"}));
// fails with java.util.MissingFormatArgumentException: Format specifier '%s'
System.out.println(String.format("%s %s", new int[] { 1, 2 }));

但是请注意,第一行会收到以下警告:

Type String[] of the last argument to method format(String, Object...) doesn't exactly match the vararg parameter type. Cast to Object[] to confirm the non-varargs invocation, or pass individual arguments of type Object for a varargs invocation.

另请注意,我没有使用构造函数输入数组,而是从封闭方法中获取它,我无法更改其签名,例如:

private String myFormat(int[] ints) {
// whatever format it is, it's just an example, assuming the number of ints
// is greater than the number of the format specifiers
return String.format("%s %s %s %s", ints);
}

最佳答案

String.format(String format, Object... args) 正在等待一个 Object 可变参数作为参数。由于 int 是原始类型,而 Integer 是 java Object,因此您确实应该将 int[] 转换为一个 Integer[]

为此,如果您使用的是 Java 7,则可以使用 nedmund answer,或者使用 Java 8,只需一行:

Integer[] what = Arrays.stream( data ).boxed().toArray( Integer[]::new );

或者,如果您不需要 Integer[],如果 Object[] 足以满足您的需要,您可以使用:

Object[] what = Arrays.stream( data ).boxed().toArray();

关于java - 如何将基元数组作为可变参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45478374/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com