Java Concurrency in Practiceという本を読んでいます。セクション 3.2 では、内部クラスを公開しながら外部クラスをエスケープする方法について説明しています。今、それを可能にする構文を探しています。私たちが持っているとしましょう:
public class ThisEscape {
public Integer i = 47;
public ThisEscape(EventSource source) {
source.registerListener(
new EventListener() {
public void onEvent(Event e) {
doSomething(e);
}
});
}
}
外側のクラスをエスケープすることが正しければ、何らかの形で囲んでいるクラス (この場合は) にEventSource
アクセスできると思います。次のように実装するとします。EventListener
ThisEscape
EventSource
public class EventSource {
public void registerListener(EventListener listener) {
// How does it have access to enclosing class of the listener variable i?
}
}
i
からパブリック変数にアクセスするにはどうすればよいregisterListener
でしょうか。
ちょうどタイプミスを見つけました。EventSource
「囲んでいるクラス」を「囲んでいるクラス」に置き換えましEventListener
た。幸いなことに、誰もが適切なバージョンを入手できました。