java - 性能/灵活性,例如类或扩展类

标签 java performance

我正在使用 2 个库,并且我需要其中一个库中的一个类才能具有另一个库的功能。我的第一次尝试是获取库 A 的源代码并让该类扩展库 B 中的类。这工作得很好,除了大量修复等,这些修复不会使代码变得那么稳定等,并且更新其中一个库成为一个问题 hell 。

像这样:

abstract class classA extends classB{
}

现在我也想过做这样的事情:

abstract class newClass extends classB{
    private classA A = new classA();

    public void exampleMethod(){
        A.exampleMethod();
    }
}

第二个选项性能不佳吗?如果是的话,有多糟糕?

最佳答案

由于多种原因,通过委托(delegate)形式(mixin)进行扩展是可取的,但最相关的是您(可能)以非规范的方式扩展第 3 方库类。

但这都是猜测,因为我们不知道您在谈论什么库。例如,它可能是一个写得不好的库,其中 classA (使用您的示例)确实不应该被扩展,但作者忽略了规范 final class classA等等。如果是这种情况,那么显然您不想扩展该类(即使可以)。

综上所述,考虑到您 (a) 仅需要共享功能,(b) 不需要多态语义,委托(delegate)形式非常有意义。

关于表现焦虑的建议:对其进行基准测试。

不要忽视final——JIT是你的 friend (善待它并喂养它):

final private classA A = new classA();

关于java - 性能/灵活性,例如类或扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6912627/

相关文章:

performance - 为redis中的所有键设置过期是一种好习惯吗

java - @Autowiring 在现场级别不起作用

java - 如何在不从中删除先前结果的情况下更新结果集

java - 是否可以中断 Java RMI 调用?

python - 使用索引循环的最快方法

c++ - 在 C++ 中搜索文件中的字符串以获得非常大的输入的有效方法

python - 比 python 中的嵌套循环更快的搜索方式

java - Matlab 与 Java

java - Java 64 位版本的性能是否优于 32 位版本?

java - 库不能设置实现版本,也不能指定其规范版本 (Weblogic)