我知道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]
。
答案 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");
}