Проблема в том, что код выше не использует generics .
Будет работать следующее:
Vector<Integer> moves = new Vector<Integer>();
move.add(new Integer(x));
Имя типа внутри <>
(в случае Vector
, параметр типа E
для элемента для хранения) сообщает компилятору, какой тип объекта он должен ожидать.
Если попытаться добавить объект указанного типа, например, в этом случае, при попытке добавить String
к и Vector<Integer>
, произойдет ошибка времени компиляции, указывающая, что тип объекта это не относится к ожидаемому типу добавляется.
Тем не менее, следует стараться не использовать класс Vector
. Для других целей было бы достаточно класса, реализующего List
, такого как ArrayList
из Java Collections Framework , и более производительного.
Редактировать
Хотя это и не имеет прямого отношения к вопросу о дженериках, Адам Пейнтер поднял хороший комментарий в комментариях об использовании автобокса.
Начиная с Java 5, примитивы и их классы-оболочки, например, int
и Integer
будут автоматически преобразованы между собой при необходимости.
Следовательно, можно добавить значение, указанное как int
или литерал int
в класс, ожидающий Integer
:
Vector<Integer> v = new Vector<Integer>();
v.add(5); // Not necessary to use an Integer value.