Что выведет код Middle Современная Java: record, sealed обновлено

Что выведет: switch с pattern matching

Вопрос

Что выведет программа (Java 21)? Каждый вывод println с новой строки.

public class Main {
    sealed interface Shape permits Circle, Rect {}
    record Circle(double r) implements Shape {}
    record Rect(int w, int h) implements Shape {}

    static String describe(Object o) {
        return switch (o) {
            case null -> "null";
            case Rect(int w, int h) when w == h -> "square " + w;
            case Rect r -> "rect " + r.w() + "x" + r.h();
            case Circle c -> "circle";
            case Integer i when i > 10 -> "big " + i;
            case Integer i -> "int " + i;
            default -> "other";
        };
    }
    public static void main(String[] args) {
        System.out.println(describe(new Rect(2, 2)));
        System.out.println(describe(new Rect(2, 3)));
        System.out.println(describe(42));
        System.out.println(describe(7));
        System.out.println(describe(null));
        System.out.println(describe("hi"));
    }
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: square 2, rect 2x3, big 42, int 7, null, other. Ветки проверяются сверху вниз.

Что выведет

square 2
rect 2x3
big 42
int 7
null
other

Разбор

Ветки проверяются сверху вниз. Квадрат совпадает с record pattern и guard w == h. Прямоугольник 2x3 guard не прошёл и попал в общий case Rect r. 42 проходит guard i > 10, 7 нет. Явный case null перехватывает null без NPE, строка уходит в default.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме