java 泛型 递归类型限制_java-抽象递归泛型导致绑定不匹配

在尝试以逻辑方式构造类时,我发现Java能够执行递归泛型.几乎正是我在结构上寻找的东西,但是我遇到了抽象类的问题.我认为Foo和Bar在这个示例中会非常混乱,因此我将与我的实际项目相关的类命名为.

public abstract class GeneCarrier> {

protected Gene gene;

//...

}

public class Gene> {

//...

}

public abstract class Organism extends GeneCarrier{

//...

}

public class Human extends Organism {

public void foo(){

Gene g; // Bound mismatch: The type Human is not a valid substitute for the bounded parameter > of the type Gene

}

}

我以为问题可能出在我的抽象有机体类的定义上,但这也产生了类似的错误:

public abstract class Organism extends GeneCarrier extends Organism>{

//...

}

尝试将抽象类与递归模板定义一起使用时是否存在固有的问题,还是我在类定义中犯了一个错误?

解决方法:

Is there an inherent problem in trying to use an abstract class with recursive template definitions, or have I made a mistake in the class definitions?

看来您做错了.基因的类型参数T的递归界限必须使人的类型参数应该意味着人是GeneCarrier< Human>.但这不是-人类是基因载体.

为了正确实现此模式,应将递归类型参数沿继承树传播,直到到达我喜欢的“叶子”类为止,在这种情况下,该类似乎是Human:

public abstract class Organism> extends GeneCarrier {

//...

}

public final class Human extends Organism {

public void foo(){

Gene g; // valid

}

}

总的来说,我发现开发人员会尝试使用“自我类型”来在某些类上实现类型安全的“复制”方法(由于您的类型名称与基因相关,因此在这里似乎是这种情况).当发生这种情况时,我总是建议尝试将复制责任分离为单独的类型,以避免递归泛型的复杂性.例如My answer here.

标签:abstract-class,generics,java

来源: https://codeday.me/bug/20191122/2056028.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值