Java 15: sealed classes
В сентябре выйдет Java 15 с новой фичей: sealed classes.
Sealed классы и интерфейсы явно определяют список наследников:
Плюс в java.lang.Class добавилось два метода:
Глобальная цель - поддержка pattern matching. Чтобы вместо
При реализации паттерна State. Раньше конечный набор состояний выражался только через enum:
❌ Значения в конструкторе жёстко задаются на этапе компиляции.
✅ Каждое состояние в отдельном файле.
✅ Экземпляры создаются во время работы программы. Конструктор принимает параметры, а не константы.
В сентябре выйдет Java 15 с новой фичей: sealed classes.
Sealed классы и интерфейсы явно определяют список наследников:
public sealed class ShapeКлассы, которых нет в блоке permits, не могут наследоваться от sealed класса. Проверка идёт во время компиляции или в IDE. В Intellij IDEA уже в июле добавили поддержку sealed типов.
permits Circle, Rectangle
Плюс в java.lang.Class добавилось два метода:
🔸ClassDesc[] getPermittedSubclasses()❓Зачем?
🔸boolean isSealed()
Глобальная цель - поддержка pattern matching. Чтобы вместо
if (s instanceof Circle) {…}использовать switch:
else if (s instanceof Rectangle) {…}
switch (s) {❓Где пригодятся sealed классы?
case Circle c -> …
case Rectangle r -> …
При реализации паттерна State. Раньше конечный набор состояний выражался только через enum:
enum State {NEW, VERIFIED;}❌ Все элементы и методы хранятся вместе. Если методов много, то размер файла растёт, и читаемость снижается.
❌ Значения в конструкторе жёстко задаются на этапе компиляции.
enum State {Теперь с помощью sealed класса:
NEW(12);
int rating;
State(int rating) {…}
}
✅ Каждое состояние в отдельном файле.
✅ Экземпляры создаются во время работы программы. Конструктор принимает параметры, а не константы.