Hardsealedjava17
Что такое sealed classes (Java 17)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Sealed class/interface — явно перечисляет разрешённых наследников через permits. Наследники должны быть final, sealed или non-sealed.
sealed interface Shape permits Circle, Square, Triangle {}
record Circle(double r) implements Shape {}
record Square(double side) implements Shape {}
record Triangle(double base, double h) implements Shape {}
// Exhaustive switch (Java 21) — default не нужен
double area = switch (shape) {
case Circle c -> Math.PI * c.r() * c.r();
case Square s -> s.side() * s.side();
case Triangle t -> 0.5 * t.base() * t.h();
};- Закрытая иерархия → компилятор гарантирует exhaustive pattern matching;
- Если добавить наследника и забыть case — ошибка компиляции;
non-sealedоткрывает ветку для любого наследования;- Records + sealed = algebraic data types, замена visitor pattern;
- Безопасность — нельзя создать постороннюю реализацию (modulo reflection perms).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.