我有这个代码:
public abstract class Character {
public abstract void attack(Character victim);
public abstract void receiveAttack(Attack attack);
}
public class CharacterA extends Character {
public void attack(Character victim) {
if (victim.getClass().equals(this.getClass())
return;
victim.receiveAttack(new Attack(BASE_DMG));
}
}
这个想法是,一个角色可以攻击其他角色,也可以从其他角色接收攻击,但它不能接收来自其自己类别的角色的攻击(角色A不能攻击另一个角色A,但可以攻击角色B或接收来自其他角色的攻击)角色B)。
我知道检查对象的类型是一种不好的感觉,通常是由于糟糕的设计而引起的,所以问题是我如何更改设计,这样我就不必检查对象类型?
编辑
该类实际上并未命名为Character
,该名称只是为了简化示例。
没有团队。 CharacterA
可以攻击除 CharacterA
以外的任何其他 Character
。
最终编辑
谢谢大家,我用访客模式解决了这个问题。
最佳答案
一个非常简单的解决方案/解决方法可能是只有一个类,并且每个 Character
对象都有一个名为 characterTeam
的 String
字段或类似的东西。对于 A 队中的角色,请将该字段设置为 “A”
或 “ATeam”
。对于 B 团队,请将该字段设置为 "B"
或 "BTeam"
。然后在 attack
方法中比较它们的 characterTeam
String
。
此外,我建议不要使用名为 Character
的类,因为这可能会干扰 char
(也名为 Character
)的包装类。
关于java - 如何避免子类的类型检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45363511/