什么时候在Java中同时使用密封类和记录?

8

关于密封类的JEP说明:

密封类不依赖记录(JEP 384)或模式匹配(JEP 375),但与两者都能很好地配合使用。

什么是“很好地配合使用”?是否有推荐在某些特定情况下使用这种组合的建议?

1个回答

10

记录不能扩展另一个类。因此,'封闭类' + '记录' 根本不起作用。

然而,记录 可以 实现接口,并且“封闭类”提案是这个 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接口。

这两个特性似乎完全正交。它们不会相互干扰,也没有一个需要或者(显著)受益于另一个的存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接