Sup*_*tar 3 java arrays variadic-functions primitive-types
为什么不编译?
public class PrimitiveVarArgs
{
public static void main(String[] args)
{
int[] ints = new int[]{1, 2, 3, 4, 5};
prints(ints);
}
void prints(int... ints)
{
for(int i : ints)
System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)
它抱怨第5行,说:
method prints in class PrimitiveVarArgs cannot be applied to given types;
required: int[]
found: int[]
reason: varargs mismatch; int[] cannot be converted to int
Run Code Online (Sandbox Code Playgroud)
但就我而言(和SO上的其他人所知),就像我int...一样int[].如果它是非基本类型,则可以工作String,但不是基元.
我甚至无法添加此方法:
void prints(int[] ints)
{
for(int i : ints)
System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)
因为编译器说:
name clash: prints(int[]) and prints(int...) have the same erasure
cannot declare both prints(int[]) and prints(int...) in PrimitiveVarArgs
Run Code Online (Sandbox Code Playgroud)
那么,为什么Java不让你将原生数组传递给varargs方法呢?另外,如果您愿意,请给我一个解决此问题的方法(即提供一种方法将变量参数或数组传递给此方法).
Ósc*_*pez 10
在你的代码中修复它,它将工作:
static void prints(int... ints) // notice the static keyword at the beginning!
Run Code Online (Sandbox Code Playgroud)
问题不在于varargs,而在于你从静态上下文调用实例方法的方式.另外,请确保没有其他具有冲突签名的方法,例如这两个方法看起来与编译器相同:
void prints(int... ints)
void prints(int[] ints)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2478 次 |
| 最近记录: |