Why does the NetBeans precompiler give a warning for this?
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);
}
}
It complains about line 5, saying:
Confusing primitive array passed to vararg method
but as far as I (and others on SO) know, int...
is the same as int[]
. This works if it's a non-primitive type, like String
, but not on primitives.
I can't even add this method:
void prints(int[] ints)
{
for(int i : ints)
System.out.println(i);
}
because the compiler says:
name clash: prints(int[]) and prints(int...) have the same erasure
cannot declare both prints(int[]) and prints(int...) in PrimitiveVarArgs
Upon looking into the NetBeans hints settings, I find it says this:
A primitive array passed to variable-argument method will not be unwrapped and its items will not be seen as items of the variable-length argument in the called method. Instead, the array will be passed as a single item.
However, when I run the file (since it's just a warning and not an error), I get exactly the output I expect:
1
2
3
4
5
so, why doesn't NetBeans like me passing a native array to a varargs method?
It's a bug in NetBeans.
https://netbeans.org/bugzilla/show_bug.cgi?id=242627
Consider the following code:
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);
}
}
}
Output:
[I@15db9742 // on my machine
Versus this code:
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);
}
}
}
Output:
1
2
3
4
5
Notice in my examples the signature of prints()
. It accepts Object...
, not int...
. NetBeans is trying to warn you that something "strange" (unexpected) might happen, but erroneously reports that prints(int...)
could do something "unexpected".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With