gpt4 book ai didi

java - 为什么 Map> 不匹配 Map>?

转载 作者:搜寻专家 更新时间:2023-10-31 08:32:04 24 4
gpt4 key购买 nike

<分区>

我有一个具有以下签名的方法:

public <T> int numberOfValues(Map<T, Set<?>> map)

但是我不能调用它传入 Map<String, Set<String>> .例如,以下不会编译:

Map<String, Set<String>> map = new HashMap<>();
numberOfValues(map);

错误信息是:

numberOfValues (java.util.Map<java.lang.String,java.util.Set<?>>) in class cannot be applied to (java.util.Map<java.lang.String,java.util.Set<java.lang.String>>)

但是,如果我更改为以下一切都很好:

public <T, V> int numberOfValues(Map<T, Set<V>> map)

但是我对V一点都不感兴趣,因为我只想知道每个集合的大小。

为了完整起见,这是整个方法:

public <T, V> int numberOfValues(Map<T, Set<V>> map) {
int n = 0;
for (T key : map.keySet()) {
n += map.get(key).size();
}
return n;
}

我知道它也可以这样完成,但这不是问题的重点:)

public <T> int numberOfValues(Map<?, Set<T>> map) {
int n = 0;
for (Set<T> value : map.values()) {
n += value.size();
}
return n;
}

更新:实现相同目标的另一种方式

public <T> int numberOfValues(Map<?, Set<T>> map) {
int n = 0;
for (Object key : map.keySet()) {
n += map.get(key).size();
}

return n;
}

最后更新:感谢 Jorn 的回答,这是最终的实现...

public int numberOfValues(Map<?, ? extends Set<?>> map) {
int n = 0;
for (Set<?> value : map.values()) {
n += value.size();
}
return n;
}

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com