찾다

 >  Q&A  >  본문

java如何理解隐式地使this引用逸出

这是《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实例的隐含引用。

PHPzPHPz2804일 전861

모든 응답(1)나는 대답할 것이다

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:33:22

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

    회신하다
    0
  • 취소회신하다