Java:在超类方法签名中返回子类

唐纳

我正在研究存在的多个实现以及Foo多个FooBuilder的问题。尽管Foo共有几个需要设置的通用变量,但它们也有不同的变量,需要它们各自FooBuilder实现某些特定功能。为了简洁起见,我想让FooBuildersetter使用方法链接,例如:

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某种方式返回实际的实现子类。但是,我不确定如何执行此操作。最好的方法是什么?

唐·罗比:

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

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

在有关使用Fluent接口使用继承的博客文章中,对该问题进行了很好的讨论,并找到了一个合理的解决方案,该文章将泛型与getThis()构建器子类中重写方法的定义结合在一起,以解决始终返回正确类的构建器的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使超类方法返回子类的实例

子类中的方法可以重载超类中的方法吗?

如何从修饰的子类方法中调用重写的超类方法

为什么从子类的超类调用方法中获得“ this”?

从超类调用子类方法

Java:强制子类重写超类的方法

Java:超类中的同步方法获得与子类中相同的锁,对吗?

是否可以从子类的超类中取代方法?

如何确保某些方法从子类(Java)中的方法从抽象超类中调用

子类java中的“重写”超类成员

如何在Java中从其超类方法停止/退出子类方法执行

java-从动态转换的超类调用子类方法

在向量C ++中从超类调用子类方法

超类引用无法在Java中调用子类方法

Java继承:在超类中调用子类方法

确定用于调用子类中的方法的超类引用

如何从超类方法而不是超类类型返回子类型

Java:从超类构造函数中的子类调用的方法

在Java中,“ this”在继承该方法的子类上调用的超类方法中表示什么?

有没有更简单的方法可以在Java中的子类和超类的ArrayList上调用子类的方法

Java在超类方法中返回不带通用参数的子类

您如何在Java中从超类调用子类方法?

子类和超类方法

如何让子类扩展python中超类的方法

在子类上调用虚拟方法将返回超类数据

从超类对象数组中调用子类方法

从 Java 中超类类型的 ArrayList 调用子类方法

Java继承问题。在超类数组中调用子类方法不会编译

对子类中的子类方法使用超类参数