java HashMap与Map参数类型
我有一个关于使用通配符的问题。我在开关中的“case 3:”行(表达式的非法启动)中遇到了编译错误,但这可能不是问题的根源。 我在meleeMap和“print”方法的另外两个参数下看到了一条红线
爪哇。util。HashMap<?扩展游戏。项目,java。lang.integer>
不能应用于
“java.util.Map<;Game.meleeWearm,java.lang.integer>;(RangedWeapon和Armor也是如此)
然后我将这些对象的第一个声明从Map改为HashMap(在private之后),它解决了这个问题。问题是为什么?HashMap实现了Map接口,所以我认为它应该在不将Map更改为HashMap的情况下工作,但它没有工作
public class Blacksmith {
private Map<MeleeWeapon,Integer> meleeMap;
private Map<RangedWeapon,Integer> rangedMap;
private Map<Armor,Integer> armorMap;
Blacksmith() {
meleeMap = new HashMap<MeleeWeapon, Integer>();
List<MeleeWeapon> meleeList = MeleeWeapon.meleeWeaponList;
for (MeleeWeapon weapon : meleeList) {
meleeMap.put(weapon, 5);
}
rangedMap = new HashMap<RangedWeapon, Integer>();
List<RangedWeapon> rangedList = RangedWeapon.rangedWeaponList;
for (RangedWeapon weapon : rangedList) {
rangedMap.put(weapon, 5);
}
armorMap = new HashMap<Armor, Integer>();
List<Armor> armorList = Armor.armorList;
for (Armor armor : armorList) {
armorMap.put(armor, 2);
}
}
public void sell(Character customer, Item item){
System.out.println("1. Melee Weapons");
System.out.println("2. Ranged Weapons");
System.out.println("3. Armors");
Scanner scanner = new Scanner(System.in);
int scan = scanner.nextInt();
switch(scan) {
case 1:
print(meleeMap);
break;
case 2:
print(rangedMap);
break;
case 3:
print(armorMap);
default:
System.out.println("Wrong input");
}
}
public void print(HashMap<? extends Item,Integer> map){
for (Item item : map.keySet()){
System.out.println(item.getName());
}
}
# 1 楼答案
打印方法指定HashMap:
如果您正在传递映射引用,则可能打算使用Map: