如何获得封闭课程?

时间:2017-06-10 15:44:34

标签: java java-8

我知道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 个答案:

答案 0 :(得分:5)

如果您知道匿名课程的命名方案,可以尝试使用Root ClassLoader {<1}}加载它:

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");
}