java - Avoiding cyclic dependencies when using listeners -


what best way avoid cyclic dependencies in simplistic example? avoid inlining selectionchangedlistener rather large/complex class.

class somegui extends dialog {     treeviewer somewidget;     selectionchangedlistener somelistener;      private void somemethod(){         somelistener = new selectionchangedlistener(this);         somewidget.addselectionchangedlistener(somelistener);     }      public void dosomething(){     } }  class selectionchangedlistener implements iselectionchangedlistener{     somegui reference;      public selectionchangedlistener(somegui reference) {         this.reference = reference;     }      @override     public void selectionchanged(selectionchangedevent event) {         reference.dosomething();     } } 

normally make listener 'inner' class of dialog, has implicit instance of dialog:

class somegui extends dialog {     treeviewer somewidget;     iselectionchangedlistener somelistener;      private void somemethod() {         somelistener = new selectionchangedlistener();         somewidget.addselectionchangedlistener(somelistener);     }      void dosomething() {     }      private class selectionchangedlistener implements iselectionchangedlistener {         @override         public void selectionchanged(selectionchangedevent event) {            dosomething();         }     } } 

note: if using java 8 can simplified to:

class somegui extends dialog {     treeviewer somewidget;     iselectionchangedlistener somelistener;      private void somemethod() {         somelistener = this::widgetselectionchanged;         somewidget.addselectionchangedlistener(somelistener);     }      private void dosomething() {     }      private void widgetselectionchanged(selectionchangedevent event) {        dosomething();     } 

}


Comments

Popular posts from this blog

ruby - Trying to change last to "x"s to 23 -

jquery - Clone last and append item to closest class -

c - Unrecognised emulation mode: elf_i386 on MinGW32 -