Serializable 람다, 로컬 클래스 및 익명 클래스 외부의 비 Serializable 지역 변수에 대한 모든 참조를 보고합니다.

익명 클래스에서 지역 변수가 참조되는 경우 그 값은 클래스의 묵시적 필드에 저장됩니다. 지역 클래스 및 람다에 대해서도 같은 동작이 발생합니다. 변수가 Serializable 타입이 아닌 경우 직렬화는 실패합니다.

예:


  interface A extends Serializable {
      abstract void foo();
  }
  class B {}
  class C {
      void foo() {
          B b = new B();
          A a = new A() {
              @Override
              public void foo() {
                  System.out.println(b); // 경고
              }
          };
      }
  }