Pull to refresh

Comments 14

Статья написана очень быстро, чтобы поддержать дискусссию в чате pro.jvm (@jvmchat в Телеграме). Скорость означает возможность опечаток.


Все опечатки и неточности просьба сообщать в хабраличку olegchir, а не в комментарии здесь.

И все же, почему изолированный, а не запечатанный? Изолированный — несет сильную коннотацию про уровень доступа.

Иначе каламбура с самоизоляцией не выйдет :)

Скорее за скалкой. Там sealed types были, когда про Котлин ещё и не слышали. Но там это проще реализовано, без всяких permits: потомки должны находиться в том же пакете и точка. Как по мне, это удобнее.

Вообще-то это фича JVM. Её и Котлин может использовать, если захочет. Проблема с продвинутыми уровнями доступа в Котлине и других JVM-языках в том, что рантайм про них ничего не знает и никак не помешает вам нарушить этот уровень при использовании смеси языков или раздельной компиляции.

Сомнительный jep как мне кажется, получается родитель должен знать о потомках, странная иерархия наследования получается. Что мешает использовать package-private для изоляции наследников?

Процитирую текст:


"Подход с package-private полезен, когда наша цель — обеспечить переиспользование кода, вроде подклассов AbstractStringBuilder, что-то добавляющих к коду родителя. Тем не менее, подход этот бесполезен при моделировании альтернатив, поскольку ключевая абстракция — суперкласс — не может использоваться в пользовательском коде. Невозможно дать пользователям доступ до суперкласса без того, чтобы разрешить им ещё и наследоваться от него! (Даже внутри графической библиотеки, которая определяет Shape и его подклассы, довольно неприятно, когда лишь один пакет может использовать Shape).


В итоге хочется, чтобы суперкласс мог быть доступен отовсюду для использования (он является важной абстракцией для пользователей), но недотупен для наследования (набор подклассов должен быть ограничен лишь теми, о ком знает автор). "

+ Всякие штуки типа Either можно делать c удобной обработкой.

Это работает с абстрактными классами, но не работает с интерфейсами. Нельзя сделать интерфейс публичным, ограничив его реализации.

Почему это оформлено как перевод? Брайан ничего не писал про размножение бельгийцев.

То есть, ты за то, чтобы я оформлял переводы со своим вступлением как статьи, а не переводы. Хорошее замечание, так и буду делать, наверное

Ну наконец-то сделают Enum с дженериками! Не менее 10 версий java ждал.
А ведь теперь еще можно будет сделать enum как в rust

Sign up to leave a comment.