本文目录#

Sealed Classes 简介#

Sealed Classes 是 JDK 15 引入的预览特性(JEP 360),允许类或接口限制哪些子类型可以继承,实现更严格的建模与模式匹配支持。

语法示例#

1
2
3
4
5
6
7
8
9
public sealed interface Shape permits Circle, Rectangle {}

public final class Circle implements Shape {
double radius;
}

public final class Rectangle implements Shape {
double width, height;
}
  • sealed 声明;
  • permits 指定允许的子类型;
  • 子类必须 finalsealednon-sealed

与模式匹配结合#

配合模式匹配 switch(JEP 406)可以对封闭层次进行穷尽检查:

1
2
3
4
5
6
static double area(Shape shape) {
return switch (shape) {
case Circle c -> Math.PI * c.radius * c.radius;
case Rectangle r -> r.width * r.height;
};
}

编译器检查所有 permitted 子类是否被覆盖。

设计建议#

  • 用于领域模型(如支付状态、事件类型);
  • record 配合描述不可变数据;
  • 对扩展性要求高的接口仍保持开放。

自检清单#

  • 是否在构建脚本中开启 --enable-preview(JDK 15)?
  • 是否评估封闭层次的扩展需求,避免未来破坏性修改?
  • 是否使用模式匹配或 instanceof 捕获所有子类型?

参考资料#


本作品系原创,采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,转载请注明出处。