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
Post a Comment