Что выведет код Middle Дженерики и стирание обновлено
Что выведет: стирание и getClass
Вопрос
Что выведет программа (Java 21)? Каждый вывод println с новой строки.
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> a = new ArrayList<>();
List<Integer> b = new ArrayList<>();
System.out.println(a.getClass() == b.getClass());
System.out.println(a.getClass().getSimpleName());
Object o = a;
System.out.println(o instanceof List<?>);
List raw = a;
raw.add(42);
System.out.println(a.size());
Object first = a.get(0);
System.out.println(first);
}
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: true, ArrayList, true, 1, 42. После стирания оба списка это один класс ArrayList. instanceof List<? разрешён и даёт true.
Что выведет
true
ArrayList
true
1
42
Разбор
После стирания оба списка это один класс ArrayList. instanceof List<?> разрешён и даёт true. Через сырой тип в список строк попадает 42. Чтение в переменную типа Object не вставляет приведение к String, поэтому исключения нет и печатается 42. Если бы написали String s = a.get(0), был бы ClassCastException.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.