2 回答
TA贡献1811条经验 获得超4个赞
一种方法是使用可变参数。假设一个法术只能由一个巫师施展,它看起来像这样:
public abstract class Spell {
private String name;
public abstract void cast(Sorcerer sorcerer, Target... targets);
}
cast 方法接受 1 个巫师和 0 个或更多目标
更好的方法
通过查看示例,似乎总是有一个巫师与一个法术相关联,该法术被保存到类变量 sorcerer(施放法术的角色)中。通过为那个 sorcerer 创建一个 getter,可以cast进一步简化方法签名:
public abstract class Spell {
private String name;
private Sorcerer sorcerer;
public Sorcerer getSorcerer() {
return sorcerer;
}
public abstract void cast(Target... targets);
}
这样仍然可以从子类访问 sorcerer,但它不是方法cast签名的一部分。
如果我理解正确的话,该方法还应该支持不同的返回类型。实现这一点的一种方法是创建一个类(例如 SpellConsequence),它可以包含不同的值和类型。这样可以从 cast 方法返回 SpellConsequence 类。
TA贡献1799条经验 获得超6个赞
怎么样void cast(Sorcerer source, Targetable target)
?你可以spell.cast(myself, myself)
治愈或spell.cast(myself, enemyPositionOrWhatever)
。
添加回答
举报