为什么NetBeans警告将int []传递给vararg?

Sup*_*tar 6 java arrays variadic-functions primitive-types netbeans-8

为什么NetBeans预编译器会对此发出警告?

public class PrimitiveVarArgs
{
    public static void main(String[] args)
    {
        int[] ints = new int[]{1, 2, 3, 4, 5};
        prints(ints);
    }

    static void prints(int... ints)
    {
        for(int i : ints)
            System.out.println(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

它抱怨第5行,说:

Confusing primitive array passed to vararg method
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)

在查看NetBeans提示设置时,我发现它说:

传递给variable-argument方法的基本数组将不会被解包,并且其项目将不会被视为被调用方法中的可变长度参数的项目.相反,该数组将作为单个项目传递.

但是,当我运行该文件时(因为它只是一个警告而不是错误),我得到了我期望的输出:

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

那么,为什么像我这样的NetBeans不会将本机数组传递给varargs方法呢?

jdp*_*nix 6

这是NetBeans中的一个错误.

https://netbeans.org/bugzilla/show_bug.cgi?id=242627

请考虑以下代码:

public class Test {
    public static void main(String[] args) {
        int[] ints = new int[]{1, 2, 3, 4, 5};
        prints(ints);
    }

    static void prints(Object... ints) {
        for(Object i : ints) {
            System.out.println(i);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

[I@15db9742 // on my machine
Run Code Online (Sandbox Code Playgroud)

与此代码对比:

public class Test {
    public static void main(String[] args) {
        Integer[] ints = new Integer[]{1, 2, 3, 4, 5};
        prints(ints);
    }

    static void prints(Object... ints) {
        for(Object i : ints) {
            System.out.println(i);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

请注意我的例子中的签名prints().它接受Object...,而不是int....NetBeans试图警告你可能会发生"奇怪"(意外)的事情,但错误地报告prints(int...)可能会做出"意外"的事情.