我知道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()
}
}
Run Code Online (Sandbox Code Playgroud)
预期的结果是:[class of task].
如果你知道你的匿名类的命名方案,你可以尝试加载它Root的ClassLoader:
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");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |