JDK17版本新增特性

张开发
2026/4/15 4:10:19 15 分钟阅读

分享文章

JDK17版本新增特性
本文只列举该版本中更新的比较常用的语法、API层面的正式特性对于预览版本或实际开发场景中使用场景有限的特性暂时不做过多说明。对于一些底层相关的特性由于解释起来比较麻烦后续会在专门的文章中做详细说明。感兴趣的同学可以直接看Oracle官方说明文档JDK 17语法层面新增密封类代码示例package com.sumlv.javase.note; /** * 示例代码 * * Auther: yuzhuo.song * Date: 2025-03-14 */ public class Demo { public static void main(String[] args) { ParentInterface clazz new SubClass6(); if (clazz instanceof SubClass5 class5) { System.out.println(clazz is class5); } else if (clazz instanceof SubClass6 class6) { System.out.println(clazz is class6); } else if (clazz instanceof SubClass7 class7) { System.out.println(clazz is class7); } else if (clazz instanceof SubClass8 class8) { System.out.println(clazz is class8); } } } // 密封类继承 sealed class ParentClass permits SubClass1, SubClass2, SubClass3 {} non-sealed class SubClass1 extends ParentClass {} final class SubClass2 extends ParentClass {} sealed class SubClass3 extends ParentClass {} final class SubClass4 extends SubClass3 {} // 密封接口实现 sealed interface ParentInterface permits SubClass5, SubClass6, SubClass7 {} non-sealed class SubClass5 implements ParentInterface {} final class SubClass6 implements ParentInterface {} sealed class SubClass7 implements ParentInterface {} final class SubClass8 extends SubClass7 {} // 密封接口继承 sealed interface SealedInterface permits SubInterface1, SubInterface2 {} non-sealed interface SubInterface1 extends SealedInterface {} sealed interface SubInterface2 extends SealedInterface {} final class SubInterface3 implements SubInterface2 {} // record实现密封接口 sealed interface SealedInterface2 permits Record1 {} record Record1 () implements SealedInterface2 {}特性说明1. 被sealed修饰的类或接口为密封类、密封接口2. 密封类、密封接口支持instanceof模式匹配3. 密封类、密封接口可以通过permits指定被哪些类继承或实现4. 如果不指定继承或实现类则可以被所有类继承或实现5. 密封类、密封接口必须有至少一个子类或子接口继承或实现6. 密封类、密封接口的子类必须被non-sealed或sealed或final修饰7. 密封接口的子接口必须被non-sealed或sealed修饰8. 密封接口不能被匿名内部类实现9. record可以不使用上述修饰符实现密封接口原因是record默认已经被final修饰了10. record不能继承密封类原因是record默认已经继承了java.lang.Record

更多文章