Java 如何正确初始化HashMap
我不确定这个哈希图是否正确,但我被卡住了!!我想申报一下 Map类型的实例变量,用于将项目映射到游戏对象。 使用HashMap在构造器中初始化地图,并将四个游戏对象放在其中。 使用map简化getName、getLocation和getSound方法。 我需要帮助理解如何正确地完成这三个步骤Java 如何正确初始化HashMap,java,eclipse,Java,Eclipse,我不确定这个哈希图是否正确,但我被卡住了!!我想申报一下 Map类型的实例变量,用于将项目映射到游戏对象。 使用HashMap在构造器中初始化地图,并将四个游戏对象放在其中。 使用map简化getName、getLocation和getSound方法。 我需要帮助理解如何正确地完成这三个步骤 package river; public class GameEngine { public enum Item { TOP, MID, BOTTOM, PLAYER; } public e
package river;
public class GameEngine {
public enum Item {
TOP, MID, BOTTOM, PLAYER;
}
public enum Location {
START, FINISH, BOAT;
}
private GameObject top;
private GameObject mid;
private GameObject bottom;
private GameObject player;
private Location currentLocation;
public GameEngine() {
top = new Wolf();
mid = new Goose();
bottom = new Beans();
player = new Farmer();
currentLocation = Location.START;
}
//Declare an instance variable of type Map that maps Items to GameObjects
Map<Item, GameObject> itemMap = createMap(){
private static Map<Item, GameObject> itemMap = new HashMap<>();
itemMap.put(Item.TOP, top);
itemMap.put(Item.MID, mid);
itemMap.put(Item.BOTTOM, bottom);
itemMap.put(Item.PLAYER, player);
return itemMap;
}
//Initialize the map in a constructor using a HashMap
???
// use map to simplify the methods (getName, getLocation, getSound)
public String getName(Item id) {
switch (id) {
case TOP:
return top.getName();
case MID:
return mid.getName();
case BOTTOM:
return bottom.getName();
default:
return player.getName();
}
}
public Location getLocation(Item id) {
switch (id) {
case TOP:
return top.getLocation();
case MID:
return mid.getLocation();
case BOTTOM:
return bottom.getLocation();
default:
return player.getLocation();
}
}
public String getSound(Item id) {
switch (id) {
case TOP:
return top.getSound();
case MID:
return mid.getSound();
case BOTTOM:
return bottom.getSound();
default:
return player.getSound();
}
}
public Location getCurrentLocation() {
return currentLocation;
}
我不确定这个哈希映射是否正确
您会发现编译器对此不满意
Map<Item, GameObject> itemMap = createMap(){
private static Map<Item, GameObject> itemMap = new HashMap<>();
itemMap.put(Item.TOP, top);
itemMap.put(Item.MID, mid);
itemMap.put(Item.BOTTOM, bottom);
itemMap.put(Item.PLAYER, player);
return itemMap;
}
它是可爱的,简洁的。。。但是它使用了一个模糊的Java语言特性,因此可能是个坏主意。许多Java程序员不会理解它
上面实际做的是声明HashMap的匿名子类,该子类在返回实例之前使用实例初始值设定项块填充实例
您听说过实例初始值设定项块吗?许多Java程序员没有!而且你可能不会被教会
这几乎相当于:
Map<Item, GameObject> itemMap = new HashMap<>();
itemMap.put(Item.TOP, top);
itemMap.put(Item.MID, mid);
itemMap.put(Item.BOTTOM, bottom);
itemMap.put(Item.PLAYER, player);
在我看来,这是一种更好的写作方式。别那么可爱:-我不是java程序员,所以这对我来说是新的。上面的代码是我在一个关于HashMap的示例中使用的,比如Map itemma=newhashmap;是我应该用的东西。。当我使用put方法时,我会出现语法错误,因此如果它出错,我就无法编译。好吧,请查看我答案的更新版本,以获得更好的编写方法。。。。并将其与您编写的内容进行比较。可能您误解了示例,但如果它实际上说要像您的代码中那样初始化映射,则这是胡说八道。我认为我的编译器讨厌我,因为我已使用您的建议更新了我的代码,我得到的只是语法错误,请插入标识符以完成MethodHeader。初始化代码需要在GameEngine的构造函数中。这也是您的需求所说的。
Map<Item, GameObject> itemMap = new HashMap<>();
itemMap.put(Item.TOP, top);
itemMap.put(Item.MID, mid);
itemMap.put(Item.BOTTOM, bottom);
itemMap.put(Item.PLAYER, player);