Когда запечатанные классы и записи используются вместе в Java? - PullRequest
2 голосов
/ 18 июня 2020

JEP для запечатанных классов говорит:

Запечатанные классы не зависят от записей (JEP 384) или сопоставления с образцом (JEP 375), но они хорошо работают с обоими.

Что значит «хорошо работать»? Есть ли рекомендации использовать комбинацию в некоторых конкретных c случаях?

1 Ответ

2 голосов
/ 18 июня 2020

Записи не могут расширять другой класс. Таким образом, «запечатанные классы» + «записи» вообще не работают.

Записи могут , однако, реализовывать интерфейсы, а предложение «запечатанные классы» является сокращением для полного имени. этого JEP, который является «запечатанными классами и интерфейсами».

запечатанные интерфейсы + записи работают. Я не думаю, что применение термина «хорошо» здесь особенно применимо. Думаю, это не работает.

Вы можете сделать так, чтобы определение вашей записи реализовывало запечатанный интерфейс. Если ваш запечатанный интерфейс содержит какие-либо определения методов, которые соответствуют методам, которые запись будет генерировать автоматически, тогда все будет хорошо. Например:

public sealed interface Person permits Student, Teacher {
    String name();
}

public record Student(String name, int id) implements Person {}

public record Teacher(String name) implements Person {}

будет работать. Функция записи обеспечивает существование метода name(), что позволяет ученику и учителю выполнять интерфейс Person.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...