我正在使用 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/