ski*_*iwi 55 java enums interface
我有以下实现,给出了编译器错误:
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);
}
Run Code Online (Sandbox Code Playgroud)
它在第一行给出了循环继承错误involving FusionStat.
我不确切地知道发生了什么.我首先实现了一个抽象类,并希望让枚举扩展,直到我意识到枚举不能扩展类.现在我尝试(ab)使用Java 8中的默认方法.
我感兴趣的是关于为什么我的代码不能编译的思考过程,我试图删除代码重复(仍然必须这样做),通过拉动里面的重复代码safeCreateBuilder.
小智 124
这是因为您正在实现(编码)您正在从该类继承的类内部实现(继承)的接口.
我希望我能把这句话变得更好......
但这是一个视觉例子.
Class A implements Interface B {
Interface B {
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这是不允许的.您需要在类之外定义接口(在本例中为Enum).
像这样:
Interface B {
}
Class A implements Interface B {
}
Run Code Online (Sandbox Code Playgroud)
最佳做法可能是将它们分解为不同的文件.
| 归档时间: |
|
| 查看次数: |
29819 次 |
| 最近记录: |