项目场景:
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.StackOverflowError 直接栈溢出了
原因分析:
创建B对象时,也创建了A对象里的匿名内部类,该内部类又创建了自己的内部类,导致无限递归。
解决方案:
尽量不要用匿名内部类作为成员变量,如果要用,一定注意是否包含无限递归的可能。
本文探讨了Java中由于在抽象类A中使用匿名内部类作为成员变量导致的StackOverflowError问题,分析了无限递归的原因,并提供了解决方案,提醒开发者注意潜在的循环创建问题。
2251

被折叠的 条评论
为什么被折叠?



