HeadlinesBriefing HeadlinesBriefing.com

Руководство по Sealed Classes и Полному Совпадению в Java

Hacker News •
×

Java 17 ввела sealed classes, которые позволяют разработчикам явно перечислить разрешенные подклассы интерфейса или класса. Эта функция делает возможным полное сопоставление, позволяя компилятору проверить, что все случаи покрыты в выражении switch без необходимости default-раздела. Например, sealed interface `SealedType` с подклассами `TypeA` и `TypeB` может использоваться в выражении switch, которое обрабатывает только эти два случая, исключая необходимость default-раздела.

Однако это вводит новый тип разрушительного изменения: добавление нового подкласса к sealed class сломает код потребителей, если они не перекомпилированы. Если потребитель не перекомпилирован, может возникнуть исключение времени выполнения (например, `MatchException`) при срабатывании нового случая. Это особенно проблемно, когда sealed types раскрываются в публичных API, так как отдельная компиляция может привести к неотслеживаемым сбоям.

Sealed types наиболее полезны внутри реализации одного компонента, где весь код перекомпилируется вместе. При использовании между границами модулей они могут вводить новые способы разрушения кода, которые обнаруживаются только во время выполнения. Разработчикам следует тщательно оценивать, подходит ли sealed types для публичных API.

Источник: Hacker News · Сводку подготовил HeadlinesBriefing