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); // 경고
}
};
}
}