【问题标题】:When are sealed classes and records used together in Java?什么时候在 Java 中一起使用密封类和记录?
【发布时间】:2020-06-18 01:56:31
【问题描述】:

JEP 在密封类上说:

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

“工作良好”是什么意思?有什么建议可以在某些特定情况下使用这种组合吗?

【问题讨论】:

    标签: java record sealed sealed-class


    【解决方案1】:

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

    然而,记录可以实现接口,并且“密封类”提案是该 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()方法存在,从而让Student和Teacher实现Person接口。

    这两个特征似乎完全正交。他们不会互相妨碍,也不需要或至少(显着)受益于对方的存在。

    【讨论】:

      猜你喜欢
      • 2021-11-12
      • 2021-01-06
      • 1970-01-01
      • 2021-11-16
      • 2011-11-10
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多