如何查找JVM中java.lang.Throwable的所有子类?Reflections使用疑问
问题解答
疑问1:指定扫描"org"前缀却出现java.lang包的类
这是因为Reflections的默认逻辑会把已被JVM加载的Throwable子类全部纳入结果,不管这些类属于哪个包。你指定的"org"只是新增的扫描路径,并非限制只扫描这个包——默认情况下它还会包含当前JVM已加载类中符合条件的子类。java.lang.Exception和java.lang.RuntimeException是Throwable的直接子类,启动Java程序时这些类就已被JVM加载,所以会出现在结果里。
疑问2:同属java.lang包的NullPointerException不在结果中
原因是java.lang.NullPointerException此时还未被JVM加载,同时它也不在你指定的"org"扫描路径下。Reflections只能找到已加载的类,或者指定扫描路径下的类,自然不会把它纳入结果。
额外提示
如果需要调整扫描范围或规则,可以修改Reflections的配置:
- 若要严格只扫描指定包的子类,需自定义
Configuration,关闭对已加载类的检测 - 若要扫描java.lang这类核心包,可把包路径加入扫描范围(比如
new Reflections("org", "java.lang")),但注意JDK核心类由Bootstrap类加载器加载,Reflections默认用应用类加载器,可能无法完整扫描到所有核心类子类。
内容的提问来源于stack exchange,提问作者Bourbon_7
相关产品推荐
相关产品推荐

