密封类在 Java 15 中作为预览功能引入,并在 Java 17 中永久保留,允许开发人员控制哪些类可以扩展或实现它们。此功能是 Amber 项目的一部分,该项目旨在通过使用小而强大的功能增强 Java 语言来提高开发人员的工作效率。
密封类是一种新的类,它限制其他类或接口可以扩展或实现它们。这样做是为了提供更健壮且可维护的类型层次结构。当您定义密封类时,您指定了一组允许的子类。
要定义密封类,请使用 seal 关键字并使用 Permits 子句指定允许的子类。这是一个例子:
public sealed class Shape permits Circle, Rectangle, Square { // class body } public final class Circle extends Shape { // class body } public final class Rectangle extends Shape { // class body } public final class Square extends Shape { // class body }
在此示例中,Shape 是一个密封类,仅允许 Circle、Rectangle 和 Square 扩展它。每个子类必须是最终的、密封的或非密封的。
密封类可用于对子类集已知且固定的层次结构进行建模。这在领域建模和使用代数数据类型时特别有用。
这是使用带有模式匹配的密封类的示例:
public class SealedClassExample { public static void main(String[] args) { Shape shape = new Circle(5); String result = switch (shape) { case Circle c -> "Circle with radius " c.radius(); case Rectangle r -> "Rectangle with width " r.width() " and height " r.height(); case Square s -> "Square with side " s.side(); }; System.out.println(result); } }
在此示例中,我们使用 switch 表达式来处理不同类型的 Shape。编译器可以确保覆盖所有可能的情况,因为 Shape 是密封的。
密封类是对 Java 的强大补充,可以更好地控制类层次结构并增强代码的可读性和可维护性。通过使用密封类,您可以在 Java 应用程序中创建更健壮且定义良好的类型系统。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3