Java中什么时候密封类和记录一起使用?

pov*_*nko 10 java record sealed sealed-class

JEP关于密封类 说:

密封类不依赖于记录 (JEP 384) 或模式匹配 (JEP 375),但它们可以很好地与两者配合。

“工作顺利”是什么意思?对于在某些特定情况下使用该组合有什么建议吗?

rzw*_*oot 12

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

然而,记录可以实现接口,并且“密封类”提案是该 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 {}
Run Code Online (Sandbox Code Playgroud)

会工作。记录功能使name()方法存在,从而允许学生和教师实现Person接口。

这两个特征看起来完全正交。它们不会互相妨碍,也不需要另一方的存在,或者至少(显着)受益于另一方的存在。