gpt4 book ai didi

Java:在父类(super class)方法签名中返回子类

转载 作者:IT老高 更新时间:2023-10-28 20:29:06 26 4
gpt4 key购买 nike

我正在解决一个问题,其中有多个 Foo 实现,伴随着几个 FooBuilder。虽然 Foo 共享几个需要设置的公共(public)变量,但它们也有不同的变量,需要各自的 FooBuilder 来实现某些特定功能。为简洁起见,我想让 FooBuilder 的 setter 使用方法链接,例如:

public abstract class FooBuilder {
...

public FooBuilder setA(int A) {
this.A = A;
return this;
}

...
}

public class FooImplBuilder extends FooBuilder{
...
public FooImplBuilder setB(int B) {
this.B = B;
return this;
}
public FooImplBuilder setC(int C) {
this.C = C;
return this;
}
...
}

等等,有几个不同的 FooBuilder 实现。这在技术上可以满足我的所有需求,但是,这种方法在执行方法链接时对方法调用的顺序很敏感。以下有方法未定义的编译错误:

someFoo.setA(a).setB(b)...

要求开发人员考虑链中方法调用的顺序。为了避免这种情况,我想让 FooBuilder 中的 setter 以某种方式返回实际的实现子类。但是,我不确定如何执行此操作。最好的方法是什么?

最佳答案

这是一个很好的问题,也是一个真正的问题。

如 Jochen 的回答中所述,在 Java 中处理它的最简单方法可能涉及使用泛型。

Using Inheritance with Fluent Interfaces 上的这篇博文中有很好的讨论和合理的解决方案,它将泛型与在构建器子类中重写的 getThis() 方法的定义相结合,以解决始终返回正确类的构建器的问题。

关于Java:在父类(super class)方法签名中返回子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10968557/

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