В коллекции EnumMap имеется параметризованный конструктор, который задаёт используемый тип элементов перечисления.
Этот тип сохраняется в экземпляре коллекции, и используется для контроля значения ключа во время работы программы:
enum Types { A, B, C }
enum Wrong { A }
public class Test {
public static void main(String... args) {
Map<Types, Integer> m = new EnumMap<Types, Integer>(Types.class);
Map m1 = m; //
m1.put(Wrong.A, null); // ошибка ClassCastException
}
}
Если использовать более популярные реализации java.util.Map (напр., HashMap, TreeMap), то аналогичный код будет выполняться без ошибок:
Map<Types, Integer> m = new HashMap<Types, Integer>();
Map m1 = m;
m1.put(Wrong.A, null); // неправильный ключ, но ошибки нет
Войдите чтобы поставить Нравится
Войдите чтобы прокомментировать