java中的sealed类、接口

今天用socket编程,看JDK的InetAddress类的接口文档,发现修饰InetAddress类用了sealed,后面还配合用了permits(我看的是JavaSE-19的接口文档):
java中的sealed类、接口_第1张图片
对这个用法不了解,于是自己决定用代码尝试下:
java中的sealed类、接口_第2张图片
java中的sealed类、接口_第3张图片
奇怪,我在eclipse中编译出错,提示在Java 1.8下不支持sealed、permits。
于是我在java工程的Java Build Path中不断升高JavaSE的版本尝试,一直到JavaSE-17,告警才消除。
java中的sealed类、接口_第4张图片
java中的sealed类、接口_第5张图片

在这里插入图片描述

现在知道了,是在JavaSE-17中才支持这个。于是查看JavaSE-16的接口文档,确实没有用sealed修饰。
java中的sealed类、接口_第6张图片
到官网上找JavaSE-17的发布文档一步一步查看:
https://www.oracle.com/java/technologies/javase/17all-relnotes.html#R17_0_7
java中的sealed类、接口_第7张图片
https://openjdk.org/jeps/409
java中的sealed类、接口_第8张图片
确实是在JavaSE-17才作为正式发布版本特性增加的。增加这个的目的是为了让父类/接口控制哪些子类能够直接继承/实现父类/接口。
sealed类/接口的直接子类必须用final、sealed或non-sealed中的一个来修饰。

你可能感兴趣的:(java,开发语言)