2 回答

TA貢獻1811條經(jīng)驗 獲得超4個贊
一種方法是使用可變參數(shù)。假設一個法術只能由一個巫師施展,它看起來像這樣:
public abstract class Spell {
? ? private String name;
? ? public abstract void cast(Sorcerer sorcerer, Target... targets);
}
cast 方法接受 1 個巫師和 0 個或更多目標
更好的方法
通過查看示例,似乎總是有一個巫師與一個法術相關聯(lián),該法術被保存到類變量 sorcerer(施放法術的角色)中。通過為那個 sorcerer 創(chuàng)建一個 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簽名的一部分。
如果我理解正確的話,該方法還應該支持不同的返回類型。實現(xiàn)這一點的一種方法是創(chuàng)建一個類(例如 SpellConsequence),它可以包含不同的值和類型。這樣可以從 cast 方法返回 SpellConsequence 類。

TA貢獻1799條經(jīng)驗 獲得超6個贊
怎么樣void cast(Sorcerer source, Targetable target)
?你可以spell.cast(myself, myself)
治愈或spell.cast(myself, enemyPositionOrWhatever)
。
添加回答
舉報