java 枚举 循环_java – 在枚举中实现内部接口时的循环继承

博客内容讲述了在尝试使用Java枚举实现接口时遇到的编译错误,具体为循环继承问题。作者最初试图让枚举扩展抽象类,但意识到枚举无法这么做,于是改为使用Java8的默认方法来减少代码重复。然而,这导致了一个错误,因为枚举实现了包含默认方法的接口。问题在于默认方法的实现导致了无限递归。博客探讨了解决这种错误的思路和可能的重构方案。
摘要由CSDN通过智能技术生成

我有以下实现,给出一个编译器错误:

public enum FusionStat implements MonsterStatBuilderHelper {

ATTACK {

@Override

public MonsterCard.MonsterCardBuilder safeCreateBuilder(final MonsterCard baseMonsterCard, final MonsterCard fusedMonsterCard, final FusionCard fusionCard) {

Objects.requireNonNull(baseMonsterCard);

Objects.requireNonNull(fusedMonsterCard);

Objects.requireNonNull(fusionCard);

if (baseMonsterCard.equals(fusedMonsterCard)) {

throw new IllegalArgumentException("baseMonsterCard and fusedMonsterCard need to be different");

}

return new MonsterCard.MonsterCardBuilder(baseMonsterCard)

.attack(baseMonsterCard.getAttack() + (fusionCard.getFusionPower() * fusedMonsterCard.getAttack()));

}

},

HITPOINTS {

@Override

public MonsterCard.MonsterCardBuilder safeCreateBuilder(final MonsterCard baseMonsterCard, final MonsterCard fusedMonsterCard, final FusionCard fusionCard) {

Objects.requireNonNull(baseMonsterCard);

Objects.requireNonNull(fusedMonsterCard);

Objects.requireNonNull(fusionCard);

if (baseMonsterCard.equals(fusedMonsterCard)) {

throw new IllegalArgumentException("baseMonsterCard and fusedMonsterCard need to be different");

}

return new MonsterCard.MonsterCardBuilder(baseMonsterCard)

.maximumHitpoints((int)(baseMonsterCard.getMaximumHitpoints() + (fusionCard.getFusionPower() / 100d * fusedMonsterCard.getMaximumHitpoints())))

.hitpoints((int)(baseMonsterCard.getHitpoints() + (fusionCard.getFusionPower() / 100d * fusedMonsterCard.getHitpoints())));

}

};

protected interface MonsterStatBuilderHelper extends MonsterStatBuilder {

default MonsterCard.MonsterCardBuilder safeCreateBuilder(final MonsterCard baseMonsterCard, final MonsterCard fusedMonsterCard, final FusionCard fusionCard) {

return createBuilder(baseMonsterCard, fusedMonsterCard, fusionCard);

}

}

}

@FunctionalInterface

interface MonsterStatBuilder {

MonsterCard.MonsterCardBuilder createBuilder(final MonsterCard baseMonsterCard, final MonsterCard fusedMonsterCard, final FusionCard fusionCard);

}

它在涉及FusionStat的第一行给出了循环继承错误。

我不清楚看到发生了什么。我首先实现了一个抽象类,并希望让枚举扩展,直到我意识到枚举不能扩展类。现在我尝试(ab)使用Java 8中的默认方法。

我对思考过程感兴趣,为什么我的代码不编译,我试图删除代码重复(仍然有这样做),通过拉复制代码内safeCreateBuilder。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值