Публикуване на обект чрез преминаване на вътрешен клас

Въпросът не е в паралелността.

Чета B. Java Concurrency на Goetz на практика и сега съм на section 3.2 относно публикуването на обекти. Той каза

Последният механизъм, чрез който може да бъде публикуван обект или неговото вътрешно състояние, е да се публикува инстанция на вътрешен клас, както е показано в ThisEscape в листинг 3.7.

public class ThisEscape {
    public ThisEscape(EventSource source) {
         source.registerListener(
              new EventListener() {
                  public void onEvent(Event e) {
                      doSomething(e);
                  }
              });
          }
     }
}

Така че се опитах да напиша свой собствен вреден пример за такава публикация. Ето го:

public class InnerPublication {

    public static void main(final String[] args){
        Subscriber s = new Subscriber();
        s.subscribe(new ToPublish(){ });
    }

    public abstract static class ToPublish{ }

    public static class Subscriber{
        public void subscribe(ToPublish tp){
            //How can I use the published enclosing instance to do some harm?
        }
    }
}

Тъй като анонимният клас е винаги (дори в статичен контекст) вътрешен клас, имаме публикация тук. Но не виждам как мога да използвам публикацията, за да навредя на приложената инстанция.


person St.Antario    schedule 25.12.2015    source източник
comment
вярвате или не, stackoverflow.com/questions/28676796/ изглежда е дубликат.   -  person tharindu_DG    schedule 25.12.2015
comment
@tharindu_DG Страхотно, благодаря ти.   -  person St.Antario    schedule 25.12.2015
comment
Не можете да получите достъп до обхващащия екземпляр на анонимния ToPublish подклас от членския клас Subscriber (освен ако не използвате отражение). Трябва да направите това от самия анонимен клас.   -  person Erwin Bolwidt    schedule 25.12.2015