Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么赢了';是否将int[]传递给vararg?_Java_Arrays_Variadic Functions_Primitive Types - Fatal编程技术网

Java 为什么赢了';是否将int[]传递给vararg?

Java 为什么赢了';是否将int[]传递给vararg?,java,arrays,variadic-functions,primitive-types,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.ou

为什么不编译此文件?

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);
    }
}
它抱怨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
但据我()所知,
int..
int[]
是一样的。如果它是非基元类型(如
String
),但在基元上不起作用,则可以使用此选项

我甚至无法添加此方法:

void prints(int[] ints)
{
    for(int i : ints)
        System.out.println(i);
}
因为编译器说:

name clash: prints(int[]) and prints(int...) have the same erasure

cannot declare both prints(int[]) and prints(int...) in PrimitiveVarArgs

因此,为什么Java不允许您将本机数组传递给varargs方法?另外,如果您愿意,请为我提供一种解决此问题的方法(即提供一种将变量参数或数组传递给此方法的方法)。

在代码中修复此问题,它将起作用:

static void prints(int... ints) // notice the static keyword at the beginning!
问题不在于varargs,而在于从静态上下文调用实例方法的方式。另外,还要确保没有其他签名冲突的方法,例如,这两个方法在编译器看来是相同的:

void prints(int... ints)
void prints(int[]  ints)

,除了在
prints
上缺少
static
之外。您可能需要阅读以下内容:您使用的编译器是什么?是的,当我创建一个实例并使用它调用
prints
时,它也可以工作。我已使用
static
更新了该问题。现在它可以编译了(真不敢相信我没有看到!>。OP代码上产生的错误消息
javac
非常奇怪,我考虑将其报告为一个bug,尽管我确信这是一个低优先级,因为编译器基本上运行正常(即不编译它)奇怪的是,Java6JDK给了我一个比Java8JDK更好的错误:
error:(6,9)java:PrimitiveVarArgs.java:6:non-static方法prints(int…)无法从静态上下文引用
这就是为什么我将问题更改为特定于IDE的@ÓscarLópez OP将他们的问题编辑为完全不同的。@Supuhstar这是一条新的错误消息,指的是Netbeans预编译器,而不是javac,原因不同(在这个答案和jdphenix之间猜测)。您应该提出新问题,而不是编辑此问题。