6

我正在做一个基于摇摆的应用程序,我使用JTable. 我用于DefaultCellEditor需要组合框选择的列之一。但是DefaultCellEditor有很多我不需要的方法。AbstractCellEditor因此,我通过扩展仅实现所需方法的位置来编写自定义 CellEditor 。我的问题是

(一般来说)如果我们有一个类并且如果我们不需要该类的所有方法是可以使用它还是编写一个只实现我们需要的那些方法的自定义类是好的?和

通过使用自定义类,应用程序的性能(内存方面)会得到改善还是与具有所有方法的类保持一致?

任何帮助将不胜感激。

4

3 回答 3

15

除非您有充分的理由相信应用程序中没有其他任何东西(包括 JDK 本身使用),否则DefaultCellEditor,您几乎肯定会通过使事情变得更糟来浪费您的时间。

您还需要考虑在极端情况下您可能节省了大约 100k 的代码,典型的 JVMS 使用大约 1 GB 来执行。因此,您可能节省了 0.01% 的代码空间。这不是对您时间的有效利用。正确的程序是在事后测试和测量时间和空间瓶颈的真正位置。程序员在预测这些事情方面是出了名的差。

于 2012-09-18T10:09:25.387 回答
3

这个类的代码(实际的字节码)只加载一次,在内存的 PermGen 区域中,不管你实例化了多少这个类型的对象。

我不会接受此代码,因为您正在复制已经可用的功能,并且您没有向 中添加功能AbstractCellEditor,您正在重新实现DefaultCellEditor已经(希望)由 Oracle(或 Sun)测试的代码。

正如 EJP 所说,不值得花时间和可能引入错误。

于 2012-09-18T10:15:21.857 回答
1

如果您创建一个包含较少成员对象的自定义类,那么内存占用会更低。方法的数量不会影响对象的大小,只会影响类的大小。

In general, I would not prematurely optimise unless you determine that you actually have a problem (i.e. if you have thousands of instances of the object and heap/garbage collector log analysis reveals that you're thrashing the memory and/or have frequent of collections of the old space), because additional code means:

  • Additional maintenance (you'd need to ensure that your custom CellEditor is not buggy)
  • Additional effort in writing the custom code
  • Additional effort in testing the custom code

AFAIK, a CellEditor is instantiated as and when needed, so you wouldn't save much memory anyway.

于 2012-09-18T10:17:13.917 回答