Что выведет код 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 ошибок.