项目场景:
java某抽象类A中需要匿名初始化一个同类型的成员变量,
public class Main {
public static void main(String[] args) {
new B();
}
}
abstract class A {
A a = new A() {//同类型成员变量
@Override
void do_sth() {
System.out.println("do nothing");
}
};
abstract void do_sth();
}
class B extends A{
@Override
void do_sth() {
System.out.println("doing B");
}
}
问题描述:
java.lang.*Error 直接栈溢出了
原因分析:
创建B对象时,也创建了A对象里的匿名内部类,该内部类又创建了自己的内部类,导致无限递归。
解决方案:
尽量不要用匿名内部类作为成员变量,如果要用,一定注意是否包含无限递归的可能。