java如何理解隐式地使this引用逸出
PHPz
PHPz 2017-04-18 10:31:22
0
1
832

这是《Java并发编程实战》3.2发布与逸出一节中的示例代码。我无法理解,this是怎么逸出的。

//隐式地使this引用逸出(不要这么做)
public class ThisEscape {
    public ThisEscape(EventSource source){
        source.registerListener(new EventListener() {
            public void onEvent(Event e){
                doSomething(e);
            }
        });
    }
}

书上说,当ThisEscape发布EventListener时,也隐含地发布了ThisEscape实例本身,因为在这个内部类的实例中包含了对ThisEscape实例的隐含引用。

PHPz
PHPz

学习是最好的投资!

모든 응답(1)
伊谢尔伦

솔직히 멀티스레딩과 이스케이프에 대해서는 잘 모르지만 내부 클래스는 이해하고 있기 때문에 확실한 답변을 드릴 수 있습니다. 내부 클래스와 익명 내부 클래스 모두 외부 객체의 필드에 접근할 수 있습니다. 실제로 이는 내부 클래스가 생성될 때 외부 클래스의 객체가 암시적으로 내부 클래스의 생성자에 매개변수로 전달되기 때문입니다. 이 매개변수를 내부 클래스의 모든 생성자에 추가하므로 예제의 익명 내부 클래스는 ThisEscape를 생성할 때 암시적으로 ThisEscape에서 생성된 개체를 익명 내부 클래스에 전달합니다. 이로 인해 어떤 문제가 발생할지 모르겠습니다. onEvent가 외부 클래스의 개인 도메인을 운영하게 될까봐 걱정되는 것 같습니다. 이 부분 좀 가르쳐 주세요

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!