Что выведет код 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 ошибок.
Термины по теме
Ещё по теме «Современная Java: record, sealed»
- switch-выражение с yield
- Pattern matching
- record
- LTS-версии Java
- Фича и версия Java
- Guard в switch
- Наследование record
- Что генерирует record