如何检查哈希图是否包含自定义 class 类型的键?

How can I check if a hashmap contains a key of a custom class type?

我有一个 hashmap,其键是自定义 class 类型 (class A),我想检查子 class B (B extends A) 是否显示为地图中的一个键。

IntelliJ 没有给我以下代码的警告,但它没有进入语句。 有什么问题吗?

HashMap<A, Integer> map = new HashMap<A, Integer>();
map.put(new B(), 1);

if (map.containsKey(new B())) {
    System.out.println("Success!");
}

您正在检查 Map 是否包含 class B 的特定实例的 key(不是 class 本身)。

如果您需要检查 Map 是否包含 class B 的键,您可以这样做:

boolean hasClass = map.keySet().stream().anyMatch(B.class::isInstance);

您正在创建 B() 对象的新实例,而该新实例不在 HashMap 中。尝试将代码更改为

HashMap<A, Integer> map = new HashMap<A, Integer>();
B keyToBeTested = new B();
map.put(keyToBeTested, 1);

if (map.containsKey(keyToBeTested) {
    System.out.println("Success!");
}