如何判断类是否被显式标记为non-sealed且无需检查父类层级?
判断类是否显式标记为non-sealed的方法
Java 17及以后版本中,没有对应isSealed()的isNonSealed()直接方法,但可以通过类的注解信息直接判断是否显式标记了non-sealed,无需遍历父类层级。
具体操作方式:
- 调用目标类的
getAnnotationsByType()方法,传入NonSealed.class作为参数 - 若返回的注解数组长度大于0,说明该类被显式标记为
non-sealed
示例代码:
import java.lang.reflect.NonSealed; public class NonSealedCheckDemo { public static void main(String[] args) { boolean isExplicitNonSealed = MyNonSealedClass.class.getAnnotationsByType(NonSealed.class).length > 0; System.out.println(isExplicitNonSealed); // 类显式标记non-sealed时输出true } } non-sealed class MyNonSealedClass {}
注意事项:
- 该方法仅适用于Java 17及以上版本,因为密封类(含
non-sealed修饰符)是Java 17引入的特性 - 只有类显式添加
non-sealed修饰符时才会携带该注解;未涉及密封特性的普通类、final类都不会返回该注解,完全符合你“直接从类本身获取显式标记信息”的需求
内容的提问来源于stack exchange,提问作者xtay2
相关产品推荐
相关产品推荐

