Comments 14
И все же, почему изолированный, а не запечатанный? Изолированный — несет сильную коннотацию про уровень доступа.
Скорее за скалкой. Там sealed types были, когда про Котлин ещё и не слышали. Но там это проще реализовано, без всяких permits: потомки должны находиться в том же пакете и точка. Как по мне, это удобнее.
Вообще-то это фича JVM. Её и Котлин может использовать, если захочет. Проблема с продвинутыми уровнями доступа в Котлине и других JVM-языках в том, что рантайм про них ничего не знает и никак не помешает вам нарушить этот уровень при использовании смеси языков или раздельной компиляции.
Процитирую текст:
"Подход с package-private полезен, когда наша цель — обеспечить переиспользование кода, вроде подклассов AbstractStringBuilder, что-то добавляющих к коду родителя. Тем не менее, подход этот бесполезен при моделировании альтернатив, поскольку ключевая абстракция — суперкласс — не может использоваться в пользовательском коде. Невозможно дать пользователям доступ до суперкласса без того, чтобы разрешить им ещё и наследоваться от него! (Даже внутри графической библиотеки, которая определяет Shape и его подклассы, довольно неприятно, когда лишь один пакет может использовать Shape).
В итоге хочется, чтобы суперкласс мог быть доступен отовсюду для использования (он является важной абстракцией для пользователей), но недотупен для наследования (набор подклассов должен быть ограничен лишь теми, о ком знает автор). "
Это работает с абстрактными классами, но не работает с интерфейсами. Нельзя сделать интерфейс публичным, ограничив его реализации.
Почему это оформлено как перевод? Брайан ничего не писал про размножение бельгийцев.
Ну наконец-то сделают Enum с дженериками! Не менее 10 версий java ждал.
А ведь теперь еще можно будет сделать enum как в rust
JEP 360: Sealed Types (Preview)