Сырой тип в Java
Обобщения появились, чтобы ошибки несовместимых типов ловились на этапе компиляции. Старый код и редкие места в новом иногда ссылаются на класс коллекции без угловых скобок. Такой тип называют сырым.
Сырой тип List без параметра ведет себя
как список элементов Object. Компилятор
выдает предупреждение, но код собирается:
@SuppressWarnings("rawtypes")
void demo() {
List raw = new ArrayList();
raw.add("text");
raw.add(10);
System.out.println(raw.size());
}
При чтении без явного приведения тип неизвестен. Ошибка может проявиться только во время работы программы:
@SuppressWarnings({"rawtypes", "unchecked"})
void risky() {
List raw = new ArrayList();
raw.add(5);
String label = (String) raw.get(0);
System.out.println(label.length());
}
Параметризованный тип List<String> не
совместим с сырым List в обе стороны
без предупреждений о непроверенных операциях.
В новом коде аргументы типа указывают явно,
сырые типы оставляют для совместимости со
старыми библиотеками.
Создайте параметризованный список строк,
добавьте "ok" и выведите элемент без
приведения типов. Убедитесь, что компилятор
знает тип элемента.
Объясните себе вслух, почему добавление
числа в List<String> запрещено, а в
сырой список - нет. Запишите один комментарий
в коде рядом с параметризованным объявлением.