由抽象封闭类创建的匿名内部类能否通过反射确定实现类?
问题的简短形式是:
- 抽象类A1
- 抽象类A2,创建匿名内部A1
- A3类扩展了A2-A2创建的A1实例是否知道它是在A3中创建的李>
充实问题:
假设我有一个抽象类:
public abstract class Abstract1 {}
然后我有了第二个抽象类,可以创建Abstract1的实例:
public abstract class Abstract2 {
protected Abstract1 createAbstract1() {
return new Abstract1() {};
}
}
第三,我有一个Abstract2的具体实现:
public class Concrete extends Abstract2 {}
让我们在Abstract2中加入一些打印语句:
public abstract class Abstract2 {
public Abstract1 createAbstract1() {
System.out.println("I am: " + getClass().getName());
Abstract1 a1 = new Abstract1() {};
System.out.println("A1 is enclosed by: " + ab1.getClass().getEnclosingClass().getName());
return a1;
}
}
当我们构造Concrete
并要求A1时,如下所示
Concrete charlie = new Concrete();
Abstract1 myA1 = charlie.createAbstract1();
。。。我们看到以下输出:
I am: Concrete
A1 is enclosed by: Abstract2
myA1怎么知道它是由具体的东西而不是抽象的东西创造的
# 1 楼答案
是的,你可以。见示例:
我添加了
printOuter
方法,如果您真的想从内部类获得它,而不是创建它的方法