繁体   English   中英

如何在JVM中找到java.lang.Throwable的所有子类?

[英]How to find all sub classes of java.lang.Throwable in the JVM?

我想在java.lang.Throwable中找到 java.lang.Throwable 的所有子类。这些类可能已经加载也可能没有加载到 JVM 中。

我读过类似的问题How do you find all subclasses of a given class in Java? ,我认为org.reflections可以解决我的问题。

我尝试了以下代码:

public static void main(String[] args) {
    Reflections reflections = new Reflections( "org" ) ;
    Set<Class<? extends Throwable>> set = reflections.getSubTypesOf( Throwable.class ) ;
    for (Class<? extends Throwable> t : set) {
        System.out.println( t ) ;
    }
}

但结果不是我所期望的:

class java.lang.Exception
class java.lang.RuntimeException
class org.reflections.ReflectionsException

我有两个疑惑:

  1. 为什么结果是java.lang.Exceptionjava.lang.RuntimeException 我使用前缀"org"
  2. 为什么java.lang.NullPointerException不在结果中? 它也在 package“java.lang”中。
  1. Reflections库的 Javadoc 说“Reflections 扫描并索引项目的类路径”,因此它不是在“JVM 中”查找,而是在类路径中查找文件并使用 Class Loader https://github.com/ronmamo/加载它们反射/blob/master/src/main/java/org/reflections/Reflections.java

  2. Reflections.expandSuperTypes()的 Javadoc 似乎暗示传递给Reflectionsprefix是为了需要找到的东西,而不是扫描的东西,它必须包含超类型才能找到您的特定 package 目标

  3. 这就是它没有列出NullPointerException的原因,因为它没有被 #2 中解释的expandSuperTypes()扫描

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM