通用方法不适用于参数

用户名

很抱歉还有另一个“ Java通用方法不适用”的问题。我想知道我的理解中缺少什么:

  1. List<E>Collection<E>
    ->含义List<String>的子类型是...的子类型Collection<String>

  2. 假设A扩展了B,List<A>不是List<B>
    ->的子类型,但是在这种情况下,只有一个类型T(或String),所以我看不到“替换原理”如何解释我的问题?

问题代码

private <T, K> void genericAddToMapOfLists(HashMap<K, Collection<T>> mapOfLists, 
    K key, T value) {
    if (mapOfLists.containsKey(key)) {
        mapOfLists.get(key).add(value);
    } else {
        List<T> newList = new ArrayList<T>();
        newList.add(value);
        mapOfLists.put(key, newList);
    }
}

private void parseToFruitList(HashMap<String, List<String>> fruit_colors,
        String fruitName) {
    String color = "";
    genericAddToMapOfLists(fruit_colors, fruitName, color);
}

错误

The method genericAddToMapOfLists(HashMap<K,Collection<T>>, K, T) in the type MyGroceryStore is not applicable for the arguments (HashMap<String,List<String>>, String, String)

当我将方法签名更改为时,代码起作用genericAddToMapOfLists(HashMap<K,List<T>>, K, T)

格特曼

您是对的,“List<String>是子类型Collection<String>”。如果A扩展BList<A>不是的子类型List<B>

更进一步,aHashMap<String, List<String>>不是a HashMap<String, Collection<String>>

相同的推理适用,其中AisListBis Collection如果aHashMap<String, List<String>>HashMap<String, Collection<String>>,则可以将其分配给,从而putaVector<String>变成a ,即使a不是,因此也是不允许的。HashMap<String, List<String>>HashMap<String, Collection<String>>VectorList

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章