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

When are sealed classes and records used together in Java?

JEP 在密封 类 上说:

Sealed classes do not depend on records (JEP 384) or pattern matching (JEP 375), but they work well with both.

"work well"是什么意思?在某些特定情况下是否有使用该组合的建议?

记录不能扩展另一个 class。因此,'sealed classes' + 'records' 根本不起作用。

记录可以,但是,实现接口,'sealed classes'提议shorthand这个JEP的全称是'sealed classes and interfaces'.

密封接口+记录作品。我不认为应用术语 'well' 在这里特别适用。估计不行吧。

您可以让记录定义实现密封接口。如果您的密封接口包含任何与记录自动生成的方法相匹配的方法定义,那么事情就会顺利进行。例如:

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 {}

会起作用。 record 特性使得 name() 方法存在,从而允许 Student 和 Teacher 实现 Person 接口。

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