JDK15特性
一、JAVA15概述
2020年9月15日java15正式发布,(风平浪静的一个版本)共有14个JEP,是时间驱动形式发布的第六个版本。
相关文档: https://openjdk.java.net/projects/jdk/15/
二、语法层面的变化
1.密封类(预览)
JEP360:Sealed Classes(Preview)密封的类和接口预览
通过密封的类和接口来增强Java编程语言,这是新的预览特性,用于限制超类的使用密封的类和接口限制其他可继承或者实现他们的其他类或接口.
目标
允许类或接口的开发者来控制那些代码负责实现,提供了比限制使用超类的访问修饰符声明方式更多选择,并通过支持对模式的详尽分析而支持模式匹配的未来发展
在java中,类层次构造通过集成实现代码的重用,父类的方法可以被许多子类继承.但是,类层次接口的目的并不总是重用代码.有时是对域中存在的各种可能性进行建模,例如图形库支持函的形状类型.当以这种方式使用类层次结构是,我们可能需要限制子类集从而简化建模.
虽然我们可以通过final来限定子类继承,但是这是绝对杜绝类子类,而类的密封是允许子类,但是限定是那个或者哪些.
具体方式
引入 Seald class或interface,这些class或者interface只允许被指定的类或者interface进行扩展和实现
使用修饰符sealed,我们可以将一个类声明为密封类.密封类使用reserved关键字permits列出可以直接扩展他的类.子类可以是最终的,非密封或者密封的
示例代码
public class TestSealedClass {
}
/*sealed 对Person类进行密封
* permits 指明哪些类可以继承
* 子类必须是final修饰的或者也是密封的
* 如果子类不想被密封,可以使用non-sealed修饰
* */
sealed class Person permits Worker,Teacher,Cook,Boss,Employee,Student {
}
final class Cook extends Person{
}
final class Boss extends Person{
}
final class Employee extends Person{
}
final class Teacher extends Person{
}
// 密封的子类允许继续有子类
sealed class Student extends Person permits PrimaryStudent,GraduateStudent{
}
final class PrimaryStudent extends Student{
}
final class GraduateStudent extends Student{
}
// 通过non-sealed取消子类密封
non-sealed class Worker extends Person{
}
class C