This question already has answers here:
Java reflection: How can I retrieve anonymous inner classes?

(2个答案)


3年前关闭。




我知道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]

最佳答案

如果您知道匿名类的命名方案,则可以尝试使用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");
}

09-10 23:58