Eclipse says: Type safety: Unchecked cast from Object to ObjectArrayList when I do:
final ObjectArrayList icars = (ObjectArrayList) cars[i];
where cars is defined as:
final Object[] cars = new Object[1000];
for (int i = 0; i < 1000; i++) {
cars[i] = new ObjectArrayList();
}
Eclipse suggests to add @SuppressWarnings("unchecked") to icars object. But I've read somewhere that annotations are deprecated in Java, so should I leave it as it is?
解决方案
The warning is just, well, warning you that the objects in the cars array that are being casted aren't guaranteed to be an ObjectArrayList.
It turns out Java doesn't allow array declaration with generic types unless they're unbounded (see Java 1.6: Creating an array of List, or this bug report 6229728 : Allow special cases of generic array creation). But if you could declare the array like this, you wouldn't be getting the warning:
final ObjectArrayList[] cars=new ObjectArrayList[1000]; // not allowed
If you really want to avoid an unchecked cast you should use a strongly typed collection instead of an array (for instance, a List>).
The @SuppressWarnings("unchecked") annotation will just tell the compiler not to show the warning. I wouldn't advice using it unless the warning really annoys you. Reality is you'll be doing an unchecked cast (not a problem if you're certain about the type of the elements in the array).
As a side note, annotations aren't in any way deprecated in Java. Actually, it seems they'll become more powerful with Java 8 (it seems they'll support JSR 308: Annotations on Java Types). Maybe you read that @Deprecated is an annotation instead.