имеют следующий интерфейс класса:Если вам следует избегать Downcasting, что я должен делать?
public interface IGameObject {
String gameObjectID();
String gameObjectName();
void isActionValid(String action);
void viewActions();
}
У меня есть следующий абстрактный класс, который реализует интерфейс выше.
package gameprobjectpackage;
public abstract class Weapon implements IGameObject {
//Left out getters/setters to keep it simple
private String gameOjectID;
private String gameObjectName;
private int damage;
public Weapon(String gameOjectID, String gameObjectName,int damage) {
super();
this.gameOjectID = gameOjectID;
this.gameObjectName = gameObjectName;
this.damage = damage;
}
Я столкнулся с несколькими сообщениями, которые предполагают, что следует избегать опускания. Я понимаю, почему, НО, мой вопрос - что мне делать, если мне нужно получить доступ к методу, который относится к подклассу. Например:
public class ChargeGun extends Weapon {
private String [] chargeGunActions;
public ChargeGun(String gameOjectID, String gameObjectName, int damage) {
super(gameOjectID, gameObjectName, damage);
chargeGunActions = new String [3];
chargeGunActions[0] = "Charge and Fire";
chargeGunActions[1] = "Release";
chargeGunActions[2] = "Drop Gun";
}
//This method is only meant for gun, and this type of gun is the only one in my game.
//This method, I don't belive should be in the abstract method weapon, because NOT every weapon is a gun.
public void reloadGun()
{
}
хранить в в interventory HashMap так:
Map<String,IGameObject> inventory = new HashMap<String,IGameObject>();
Когда я получить его, я получаю IGameObject
, как я правильно бросить его, так что я могу получить доступ метод в ChargeGun
?
Я не вижу другого способа сделать это без понижения. Вы можете замаскировать его как что-то еще, например, создать класс InventoryMap, который имеет методы для извлечения только карт определенных типов или объектов, которые уже опустились, возможно, немного очистив ваш код. Но под капотом он все еще удручает. –
Спасибо, просто из любопытства, как бы я его очистил? –
Вы, вероятно, должны разделить свой инвентарь, потому что, что касается других предметов, таких как расходные материалы и т. Д., У них у всех разные методы класса. –