有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何获得封闭类?

我知道Class.getDeclaredClasses()可以获得它声明的所有类,但不包括匿名类

我想知道有没有办法通过封闭类获得所有封闭类?例如,我想获取Root中定义的所有封闭类,以用于测试

class Root{
   void run(){
      Runnable task = new Runnable(){
         public void run(){}
      };

      task.getClass().getEnclosingClass();// return Root.class
      // but I want to get all enclosed class via Root.class, for example:
     // Root.class... == task.getClass() 
   }
}

预期结果是:[class of task]


共 (1) 个答案

  1. # 1 楼答案

    如果知道匿名类的命名方案,可以尝试使用RootClassLoader加载它:

    javac的命名方案是<enclosing_class_name>$<anonymous_class_number>

    Class<?> enclosing = Root.class;
    
    try{
        Class<?> anon1 = enclosing.getClassLoader().loadClass(enclosing.getName() + "$1");
        System.out.println(anon1); // prints: class Root$1
    } catch (ClassNotFoundException e) {
        System.out.println("no anonymous classes");
    }