Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvOpEsPr 99 of 147 menu
◀ ▶

Ключевое слово permits в Java

После объявления sealed class или sealed interface можно указать ключевое слово permits и через запятую перечислить типы, которым разрешено наследование или реализация. Каждый указанный тип должен быть final, sealed или non-sealed:

sealed class Post permits DraftPost, PublishedPost { } final class DraftPost extends Post { } final class PublishedPost extends Post { }

Создадим DraftPost и убедимся, что это не PublishedPost:

Post post = new DraftPost(); System.out.println(post instanceof PublishedPost);

Тот же список задают для запечатанного интерфейса - в permits перечисляют классы, которые его реализуют:

sealed interface PostAction permits SaveAction, PublishAction { } final class SaveAction implements PostAction { } final class PublishAction implements PostAction { }

Создадим PublishAction и выведем короткое имя его класса:

PostAction action = new PublishAction(); System.out.println(action.getClass().getSimpleName());

Если все наследники или реализации объявлены в том же файле, что и запечатанный тип, permits можно опустить - компилятор составит список сам. Явная запись удобна, когда список нужно видеть сразу в заголовке типа:

final class ArchivedPost extends Post { }

Спросим у класса Post, запечатан ли он, и выведем ответ:

System.out.println(Post.class.isSealed());

Объявите sealed class Employee permits Intern, Staff и оба final подтипа. Сохраните new Intern() в переменную Employee и выведите результат instanceof Intern.

Объявите sealed interface Role permits GuestRole, UserRole с двумя final реализациями. Создайте new UserRole(), сохраните в Role и выведите простое имя класса.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить