我应该处置从 EditingSupport.getCellEditor
返回的 CellEditor
吗?如果是,我应该什么时候处置。
在 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;
}
最佳答案
如果您对 ViewerColumns
使用这样的 EditingSupport
,第一个片段对我来说看起来像是一个令人讨厌的泄漏。看看ColumnViewerEditor的来源就行了,该类处理有关 CellEditors
的大量工作。有很多像
if(part.getEditingSupport() != null)
(其中 part
是 ViewerColumn
)。这些调用在 TextCellEditor
的构造函数中创建一个 Text
实例。但由于 EditingSupport
实例未分配,因此它会立即被GC。 Text
实例不会被释放(直到它的父实例被释放)。泄漏。
所以你的第二个片段看起来更好。
哪个教程?也许你应该报告这一点。
关于java - 我应该处理从 EditorSupport 返回的 jface CellEditors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6008680/