This question already has answers here:
Java reflection: How can I retrieve anonymous inner classes?
(2个答案)
3年前关闭。
我知道
我想知道是否可以通过封闭类获取所有封闭类?例如,我想获取
预期的结果是:
(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]
。 最佳答案
如果您知道匿名类的命名方案,则可以尝试使用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");
}
09-10 23:58