У меня есть этот базовый абстрактный класс:Использование одного HashMap для нескольких унаследованных классов
public abstract class GameObject {
private int _position;
private int _resourceId;
private ObjectType _objectType;
public GameObject(ObjectType type, int position, int resourceId){
_objectType = type; _position = position; _resourceId = resourceId;
}
public ObjectType getObjectType(){
return _objectType;
}
//Some more methods...
}
Тогда у меня есть еще несколько классов, которые inehrit от GameObject
:
public class Snake extends GameObject{
private SnakeType _snakeType;
public Snake(ObjectType type, int position, int resourceId, SnakeType snakeType){
super(type, position, resourceId);
_snakeType = snakeType;
}
public SnakeType getSnakeType(){
return _snakeType;
}
public int getDamage(){
return _snakeType.getMask();
}
}
public class Home extends GameObject{
public Home(ObjectType type, int position, int resourceId) {
super(type, position, resourceId);
}
}
Моя проблема в том, что я должен имеют набор этих объектов в позиции HashMap<Integer, GameObject>...so I Can have access to theire shared members like
and
resourceId`.
Как я могу достичь этого? Если нет, какова будет альтернатива?
UPDATE
Оказалось, что я могу на самом деле поставить любой подкласс GameObject
в HashMap
.
int id = 1;
_hashMap.put(id++, new Home(ObjectType.HOME, id -1, resHome));
_hashMap.put(id++, new Normal(ObjectType.NORMAL, id -1, resNormal));
_hashMap.put(id++, new Snake(ObjectType.SNAKE, id -1, resSnakeOne, SnakeType.A));
Но теперь, когда я хочу, чтобы получить детали назад, я сталкиваюсь проблема:
Snake snake = _hashMap.get(3);
компилятор жалуется, что он должен найти GameObject
но не Snake
... Что здесь проблема?
У меня есть хэш-карта в другом классе (в классе, который наследуется от BaseAdapter), и я хочу добавить все объекты в эту хэш-карту, чтобы позднее я мог предоставить getView
позицию и ресурс объектов как доступных.
Использование CAST Я могу преобразовать его обратно, но он убивает всю идею .... Я хочу указать на все игровые объекты, используя Ключ хэшмапа .... В данный момент я должен помнить, какой ключ ссылается к каким объектам:
GameObject obj = _hashMap.get(3);
Snake snake = (Snake) obj;
snake.getSnakeType();
Хорошо, в чем проблема? –
Вы используете 'HashMap', вы всегда можете получить доступ к объекту значения, найдя его ключом. Пожалуйста, можете быть более конкретным? –
Sage
В вашем GameObject вы можете иметь поле 'protected static HashMap'. Что вы имеете в виду под одним HashMap? –