gpt4 book ai didi

java - 如何减少委托(delegate)样板?

转载 作者:行者123 更新时间:2023-12-01 18:51:33 27 4
gpt4 key购买 nike

我有一个实现接口(interface)的类。还有另一个类也实现了这个接口(interface),并且第二个类的实例支持我的类的实现。

对于接口(interface)指定的许多方法,我的类只是将它们直接转发到第二个类。

public class MyClass implements MyInterface
{
private OtherClass otherClassInstance; // Also implements MyInterface.
// ...
void foo() { otherClassInstance.foo(); }
void bar() { otherClassInstance.bar(); }
void baz() { otherClassInstance.baz(); }
// ...
}

简单地从第二个类派生我的类将消除所有这些,但这没有意义,因为这两个类彼此无关(除了实现公共(public)接口(interface)之外)。它们代表不同的事物 - 碰巧我的类的许多实现都复制了其他类的实现。换句话说,我的类是在第二类之上实现的,但它本身并不是第二类的子集。我们知道,继承是为了表达“is-a”关系,而不是共享实现,因此在这种情况下是不合适的。

This Joshua Bloch 的演讲的一部分很好地说明了这种情况。

我知道 Java 没有任何语言支持委派。但是,是否至少有某种方法可以清理我的类的实现,使其不再那么多余?

最佳答案

这个答案并不是您实际问题的真正答案:

我想说,接受样板。让 IDE 为您生成它。示例:在 Netbeans 中,添加私有(private) ArrayList 字段,将光标设置到您希望方法出现的位置,按 alt-insert,选择“生成委托(delegate)方法...”,单击您想要的方法想要在打开的对话框中创建一个委托(delegate),提交,遍历生成的方法并让它们做正确的事情,你就完成了。

这有点难看,但是当您只处理一个类时,它仍然比开始困惑反射更好,就像听起来一样。您的类(class)可能是这样的类(class),您将完成并充分测试该类(class),然后希望永远不再接触。反射产生的运行时成本不会消失。在这种情况下,在源文件中使用自动生成的样板可能是更好的选择。

关于java - 如何减少委托(delegate)样板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15758588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com