java 实现协方差_java-推断协方差是否存在

我将一些代码重构为构建器模式,并在子类的构建器子类化时遇到问题.

当我有一个生成器子类,并且尝试在父级中链接一个方法时,它将返回父级生成器,因此我的实例不再有权访问子类方法.

public class App {

public static void main(String[] args) {

Parent p;

p = new App().new ChildBuilder()

.withName("Test")

.withNickName("Test1")

.build();// Doesn't Compile

p = new App().new ChildBuilder()

.withNickName("Test1")

.withName("Test")

.build();

}

class Parent {

public Parent(ParentBuilder builder) {}

}

class Child extends Parent {

public Child(ChildBuilder builder) { super(builder); }

}

class ParentBuilder {

private String name;

public ParentBuilder() {}

public Parent build() { return new Parent(this); }

public ParentBuilder withName(String name) {

this.name = name;

return this;

}

}

class ChildBuilder extends ParentBuilder {

private String nickName;

public ChildBuilder withNickName(String nickName) {

this.nickName = nickName;

return this;

}

}

}

main方法中的第二行将不会编译,因为withName(“ Test”)位于ParentBuilder类上并返回ParentBuilder.对链进行重新排序以调用所有ChildBuilder方法首先可以解决此问题,但是对于使用我的api(包括我自己)的人们来说,这听起来像是一种糟糕的体验.

如果在子项中添加替代,则可以通过协方差使其起作用:

@Override

public ChildBuilder withName(String name) {

super.withName(name);

return this;

}

但这是我不愿维护的许多样板代码(每个父构建器可能有几个子类,因此我需要为父类中的每个方法重写每个子类中的这些方法).

有没有一种方法可以在没有覆盖的情况下做我想做的事情? Java可以在子级中“推断”协变方法吗?

我也担心这个问题表明我在错误地设计建造者.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值