Java 泛型方法不适用于参数
抱歉,还有另一个“Java通用方法不适用”的问题。我想知道我的理解中遗漏了什么:Java 泛型方法不适用于参数,java,generics,subtype,Java,Generics,Subtype,抱歉,还有另一个“Java通用方法不适用”的问题。我想知道我的理解中遗漏了什么: 列表是集合的子类型 -->意思是,List是Collection 假设A扩展了B,List不是List的子类型 -->但在这种情况下,只有一种类型T(或String),所以我不明白替换原则如何解释我的问题 问题代码: private <T, K> void genericAddToMapOfLists(HashMap<K, Collection<T>> mapOfLists,
列表
是集合的子类型
-->意思是,
List
是Collection
List
不是List
的子类型-->但在这种情况下,只有一种类型
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);
}
private void generalicaddtomapoflists(HashMap-mapOfLists,
K键,T值){
if(列表的映射。容器(键)){
mapOfLists.get(key).add(value);
}否则{
List newList=newarraylist();
添加(值);
mapOfLists.put(key,newList);
}
}
私有void parsetFruitlist(HashMap水果颜色,
字符串(名称){
字符串颜色=”;
通用的果酱(水果颜色、水果名称、颜色);
}
错误:
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)
MyGroceryStore类型中的genericAddToMapOfLists(HashMap,K,T)方法不适用于参数(HashMap,String,String)
当我将方法签名更改为
genericAddToMapOfLists(HashMap,K,T)
时,代码就会工作 这正是您在第二点中解释的问题
假设A
扩展B
,List
不是List
在这种情况下,您的方法需要
HashMap<?, Collection<?>>
HashMap>
但是你在给它
HashMap<?, List<?>>
HashMap>
List
扩展了Collection
,但是HashMap你说得对“List
是Collection
的子类型”。如果A
扩展B
,List
不是List
的子类型
更进一步说,HashMap
不是HashMap
同样的推理也适用,其中A
是列表
,B
是集合
。如果一个HashMap
是一个HashMap
,那么你可以将向量
分配给HashMap
,将其放入HashMap
,即使向量
不是列表,因此它是不允许的。不需要在标题中添加主标记。