El problema es que el código anterior no utiliza generics.
El siguiente trabajo:
Vector<Integer> moves = new Vector<Integer>();
move.add(new Integer(x));
El nombre del tipo en el interior del <>
(en el caso de Vector
, el parámetro de tipo E
para el elemento para sostener) indica al compilador qué tipo de objeto que debe esperar.
Si se intenta agregar un objeto que es del tipo especificado, como en este caso, tratando de agregar un String
a Vector<Integer>
, se producirá un error en tiempo de compilación, indicando que un tipo de objeto que no es del tipo esperado se está agregando.
Dicho esto, uno debe tratar de no utilizar la clase Vector
. Para más propósitos, una clase implementando List
como ArrayList
del Java Collections Framework sería suficiente y de mejor rendimiento.
Editar
Aunque no está directamente relacionada con la pregunta acerca de los genéricos, Adam Paynter trajo un buen punto en los comentarios sobre el uso de auto-boxing.
Desde Java 5, las primitivas y sus clases de envoltura, p. int
y Integer
se convertirán automáticamente entre sí según sea necesario.
Por lo tanto, es posible añadir un valor especificado como un int
int
o un literal en una clase esperando una Integer
:
Vector<Integer> v = new Vector<Integer>();
v.add(5); // Not necessary to use an Integer value.
Tenga en cuenta que no es un error, solo una advertencia. Todavía es perfectamente válido hacer lo anterior, si no le importa la advertencia. – Joel