Java: Array of primitive data types does not autobox
I have a method like this:
public static <T> boolean isMemberOf(T item, T[] set)
{
for (T t : set) {
if (t.equals(item)) {
return true;
}
}
return false;
}
Now I try to call this method using a char
for T
:
char ch = 'a';
char[] chars = new char[] { 'a', 'b', 'c' };
boolean member = isMemberOf(ch, chars);
This doesn't work. I would expect the char
and char[]
to get autoboxed to Character
and Character[]
, but that doesn't seem to happen.
Any insights?
There is no autoboxing for arrays, only for primitives. I believe this is your problem.
Why would char[]
be boxed to Character[]
? Arrays are always reference types, so no boxing is required.
Furthermore, it would be hideously expensive - it would involve creating a new array and then boxing each char in turn. Yikes!
You could use reflection to get a method that works for all types of arrays, but you would lose type safety, so this is probably not what you want.
import java.lang.reflect.Array
public static boolean isMemberOfArray(Object item, Object array)
{
int n = Array.getLength(array)
for (int i = 0; i < n; i++) {
if (Array.get(array, i).equals(item)) {
return true;
}
}
return false;
}