匿名内部类成员变量初始化导致 java.lang.*Error

项目场景:

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对象里的匿名内部类,该内部类又创建了自己的内部类,导致无限递归。


解决方案:

尽量不要用匿名内部类作为成员变量,如果要用,一定注意是否包含无限递归的可能。

上一篇:循环结构


下一篇:SAP ABAP 如何在ALV中自动加入合计数