Java 获取参数与hashmap中的键不同的hashmap命令?

Java 获取参数与hashmap中的键不同的hashmap命令?,java,hashmap,Java,Hashmap,我在hashmap中有一个自定义类作为我的键,如下所示 // In the main function HashMap<Drink, boolean> drinkMap = new HashMap<>(); // What I would like to be able to do: drinkMap.get("beer"); // My drink Class which is used as the key public class Drink implement

我在hashmap中有一个自定义类作为我的键,如下所示

// In the main function
HashMap<Drink, boolean> drinkMap = new HashMap<>();

// What I would like to be able to do:
drinkMap.get("beer");

// My drink Class which is used as the key
public class Drink implements Comparable<String> {
    private String name;
    private String info;

    public String getName() {
        return Name;
    }

    public Drink(String name, String info) {
        this.name = name;
        this.info = info;
    }
}

但是当我执行hashMap.get(“啤酒”)时,它总是返回null,即使我知道地图中存在一个名为“啤酒”的饮料对象。

这是一个糟糕的想法。您应该始终查询与预期键具有相同类型(或其子类型)的映射。不这样做只会给你带来问题(我相信你已经开始注意到)

你应该考虑让你的地图的关键是“代码>字符串类型,或者通过代码查询>地图>饮料<代码>


(至于您的具体案例不起作用的原因:
“beer.equals(drink)!=drink.equals(“beer”)

为什么不使用名称作为键?如果您花2分钟查看
HashMap
的源代码,您将看到为什么这永远不会起作用。如果这还不清楚的话,一个步骤调试器会让它非常清楚。老实说,我没有理由不能。我可以重构它,使布尔值成为饮料类的一部分,或者最终使用两个映射。但我想如果这能奏效,它可能会变得更简单。。。开始意识到事实并非如此。最后一部分才是真正可怕的部分。
@Override
public int hashCode() {
    return Name.hashCode();
}

@Override
public boolean equals(Object o) {
    return o instanceof String && o.equals(Name);
}