Il problema è che il codice sopra non utilizza generics.
Quanto segue funziona:
Vector<Integer> moves = new Vector<Integer>();
move.add(new Integer(x));
Il nome del tipo all'interno del <>
(nel caso di Vector
, il parametro di tipo E
per l'elemento per tenere) dice al compilatore che tipo di oggetto si dovrebbe aspettare.
Se si cerca di aggiungere un oggetto che è del tipo specificato, come in questo caso, cercando di aggiungere un String
ae Vector<Integer>
, si verificherà un errore di compilazione, indicando che un tipo di oggetto che non è del tipo previsto è stato aggiunto.
Detto questo, si dovrebbe cercare di non utilizzare la classe Vector
. Per altri scopi, una classe che implementa List
come ArrayList
da Java Collections Framework sarebbe sufficiente e con prestazioni migliori.
Modifica
Anche se non direttamente legato alla domanda su farmaci generici, Adam Paynter ha portato un buon punto nei commenti circa l'uso di auto-boxing.
Poiché Java 5, primitive e le relative classi wrapper, ad es. int
e Integer
verranno automaticamente convertiti tra di loro se necessario.
Pertanto, è possibile aggiungere un valore specificato come int
o un int
letterale in una classe in attesa di un Integer
:
Vector<Integer> v = new Vector<Integer>();
v.add(5); // Not necessary to use an Integer value.
Nota, non è un errore, è solo un avvertimento. È ancora perfettamente valido per fare quanto sopra, se non ti interessa l'avviso. – Joel