Записи не могут расширять другой класс. Таким образом, «запечатанные классы» + «записи» вообще не работают.
Записи могут , однако, реализовывать интерфейсы, а предложение «запечатанные классы» является сокращением для полного имени. этого 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
.
Эти две функции кажутся полностью ортогональными. Они не мешают друг другу, и одно из них не требует или хотя бы (значительно) извлекает выгоду из существования другого.