max*_*yme 14 java arrays variadic-functions
我试图将一个基元数组(在我的例子中int[])传递给一个带有varargs的方法.
让我们说:
// 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 }));
Run Code Online (Sandbox Code Playgroud)
但请注意,第一行会收到以下警告:
类型String []的方法格式(String,Object ...)的最后一个参数与vararg参数类型不完全匹配.转换为Object []以确认非varargs调用,或者为varargs调用传递Object类型的各个参数.
另请注意,我不使用构造函数输入数组,但是我从封闭方法中获取它,其签名我无法更改,例如:
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);
}
Run Code Online (Sandbox Code Playgroud)
在String.format(String format, Object... args)等待一个Object可变参数作为参数.既然int是原始的,虽然Integer是java Object,你的确应该将你转换int[]为Integer[].
要做到这一点,你可以使用nedmund答案,如果你使用的是Java 7,或者使用Java 8,你可以使用它:
Integer[] what = Arrays.stream( data ).boxed().toArray( Integer[]::new );
或者,如果你并不需要有一个Integer[],如果Object[]是足以让你的需求,你可以使用:
Object[] what = Arrays.stream( data ).boxed().toArray();
| 归档时间: |
|
| 查看次数: |
2498 次 |
| 最近记录: |