我应该处理从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;
}
答案 0 :(得分:3)
如果您对EditingSupport
使用ViewerColumns
,那么第一个片段对我来说就像是一个令人讨厌的泄漏。只需查看ColumnViewerEditor的来源,该类处理CellEditors
周围的大量工作。有许多行,如
if(part.getEditingSupport() != null)
(part
为ViewerColumn
)。这些调用在Text
的构造函数中创建TextCellEditor
实例。但由于未分配EditingSupport
实例,因此将立即进行GC。 Text
实例不会被处理(直到其父级被处置)。泄漏。
所以你的第二个片段似乎更好。
哪个教程?也许你应该报告。