我正在使用基于swing的应用程序,我使用JTable
。我使用DefaultCellEditor
作为需要组合框选择的列之一。但DefaultCellEditor
有许多我不需要的方法。所以我通过扩展AbstractCellEditor
编写了一个自定义的CellEditor,我只实现了所需的方法。我的问题是
(一般情况下)如果我们有一个类,如果我们不需要该类的所有方法就可以使用它,或者编写一个自定义类是不是很好,我们只实现了我们需要的那些方法?和
通过使用自定义类,应用程序的性能(内存方式)是否会得到改善,或者它与具有所有方法的类保持一致?
任何帮助将不胜感激。
答案 0 :(得分:15)
除非你有充分理由认为应用程序中没有任何其他东西,包括JDK本身使用DefaultCellEditor,
,否则你几乎肯定会因为事情变得更糟而浪费你的时间。
您还需要考虑在极端情况下可能已经保存了大约100k的代码,其中典型的JVMS使用大约一千兆字节来执行。所以你可能已经节省了0.01%的代码空间。这不是你的时间的有效利用。正确的程序是在事后测试和测量时间和空间瓶颈的确切位置。众所周知,程序员在预测这些事情方面很差。
答案 1 :(得分:3)
此类的代码(实际字节码)仅在内存的PermGen区域中加载一次,无论您实例化此类型的对象有多少。
我不接受此代码,因为您正在复制已经可用的功能,并且您没有向AbstractCellEditor
添加功能,您正在重新实现DefaultCellEditor
中已经存在的代码(希望如此) )由Oracle(或Sun)测试。
正如EJP所说,引入错误并不值得花时间和潜力。
答案 2 :(得分:1)
如果创建包含较少成员对象的自定义类,则内存占用量将会降低。方法的数量不会影响对象的大小,只会影响类的大小。
一般情况下,我不会过早地进行优化,除非你确定你确实遇到了问题(即如果你有数千个对象实例,而堆/垃圾收集器日志分析显示你正在颠覆内存和/或有频繁收集旧空间),因为附加代码意味着:
CellEditor
没有错误) AFAIK,CellEditor
会在需要时进行实例化,因此无论如何都不会节省太多内存。