Offending bit of code
Vector moves = new Vector();
moves.add(new Integer(x));
Error:
ConnectFour.java:82: warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.Vector moves.add(new Integer(x));
Not really sure how much info is needed for an error like this....
Not directly related to the code, but it is recommended to use (from version >= 5):
instead of
Because, some integer values {-128,...,127) are cached and it will always return the same object. This is very useful especially regarding to autoboxing.
The problem is that the code above is not using generics.
The following will work:
The type name inside the
<>
(in the case ofVector
, the type parameterE
for the element to hold) tells the compiler what type of object it should expect.If one tries to add an object that is of the specified type, such as in this case, trying to add an
String
to andVector<Integer>
, an compile-time error will occur, indicating that a type of object that is not of the expected type is being added.That said, one should try not to use the
Vector
class. For more purposes, a class implementingList
such asArrayList
from the Java Collections Framework would be sufficient, and better performing.Edit
Although not directly related to the question about generics, Adam Paynter brought up a good point in the comments about the use of auto-boxing.
Since Java 5, primitives and their wrapper classes, e.g.
int
andInteger
will be automatically converted between each other as necessary.Therefore, it is possible to add an value specified as an
int
or anint
literal into a class expecting anInteger
:That's not an error, it's just a compiler warning. Vector is usually parametized, so to get rid of the warning, just use generics:
initialize your vector like this
Preferably use
java.util.ArrayList
- it's a replacement ofVector
If you have no choice but to use the non-generic data structure, you can put
@SuppressWarnings("unchecked")
at the start of the method to silence the warning.This only be done if you have no choice but to use the non-generic vector. This usually happens when you're working with older libraries or certain parts of the Java runtime libraries.