Должен ли я утилизировать jface CellEditors, возвращенный из EditorSupport - PullRequest
2 голосов
/ 15 мая 2011

Должен ли я распоряжаться CellEditor, возвращенным из EditingSupport.getCellEditor, и если да, то когда я должен это сделать.

В одном из руководств по jface TableViewer я видел следующий фрагмент:

public class FirstNameEditingSupport extends EditingSupport {

    @Override
    protected CellEditor getCellEditor(Object element) {
        return new TextCellEditor(viewer.getTable());
    }

Так что, если метод был отредактирован несколько раз? Или мне просто лениво инициализировать CellEditor:

 public class FirstNameEditingSupport extends EditingSupport {

    CellEditor editor;

    @Override
    protected CellEditor getCellEditor(Object element) {
        if(editor == null){
           editor = new TextCellEditor(viewer.getTable());
       }

       return editor;
    }

1 Ответ

3 голосов
/ 15 мая 2011

Первый фрагмент выглядит для меня как неприятная утечка, если вы используете EditingSupport для ViewerColumns.Просто взгляните на источник ColumnViewerEditor , который обрабатывает большую часть работы вокруг CellEditors.Есть много строк, таких как

if(part.getEditingSupport() != null)

part, равным ViewerColumn).Эти вызовы создают экземпляр Text в конструкторе TextCellEditor.Но поскольку экземпляр EditingSupport не назначен, он будет немедленно GCed.Экземпляр Text не будет удален (пока не будет удален его родитель).Утечка.

Итак, ваш второй фрагмент выглядит лучше.

Какой учебник?Может быть, вы должны сообщить об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...