Java:在列表中添加或删除元素时避免使用'instanceof'

Pat*_*t K 4 java arraylist instanceof

我在创造一个游戏.游戏有GameMap.为了跟踪GameMap上的事物状态,我想为每个事物创建ArrayLists.问题是,我不想创建单独的方法来添加或从每种类型的ArrayList中删除项目.我是新手,所以当然我能想到的第一件事是'instanceof'运算符.

请记住,目前,GameMap是一个离散类,而不是接口或抽象类.目的是在初始化游戏时实例化GameMap对象.

public class GameMap {

//GameMap has a name
private String mapName;

//GameMap has rooms
private ArrayList<Room> roomsOnMap;

//GameMap has items
private ArrayList<Item> itemsOnMap;

//GameMap has people
private ArrayList<Person> peopleOnMap;

//construct GameMap with rooms, items, and people
private GameMap(String mapName, ArrayList someRooms, ArrayList someItems, ArrayList somePeople)
{
    this.mapName = mapName;
    this.roomsOnMap = someRooms;
    this.itemsOnMap = someItems;
    this.peopleOnMap = somePeople;
}

public void addObject(Object o)
{
    //HOW DO I AVOID THIS?
    if(o instanceof Room)
    {
        roomsOnMap.add((Room) o);
    }
    else if(o instanceof Item)
    {
        itemsOnMap.add((Item) o);
    }
    else if(o instanceof Person)
    {
        peopleOnMap.add((Person) o);
    }
}
Run Code Online (Sandbox Code Playgroud)

Jac*_*ack 6

使用重载方法:

void addObject(Room room) {
  roomsOnMap.add(room);
}

void addObject(Item item) {
  itemsOnMap.add(item);
}

..
Run Code Online (Sandbox Code Playgroud)