List<Map<String, String>> vs List<?扩展 Map<String, String>>
2022-08-31 08:27:15
两者之间有什么区别吗?
List<Map<String, String>>
和
List<? extends Map<String, String>>
?
如果没有区别,使用有什么好处?? extends
两者之间有什么区别吗?
List<Map<String, String>>
和
List<? extends Map<String, String>>
?
如果没有区别,使用有什么好处?? extends
不同之处在于,例如,一个
List<HashMap<String,String>>
是一个
List<? extends Map<String,String>>
但不是
List<Map<String,String>>
所以:
void withWilds( List<? extends Map<String,String>> foo ){}
void noWilds( List<Map<String,String>> foo ){}
void main( String[] args ){
List<HashMap<String,String>> myMap;
withWilds( myMap ); // Works
noWilds( myMap ); // Compiler error
}
你可能会认为 a of s 应该是 a of s,但有一个很好的理由为什么它不是:List
HashMap
List
Map
假设你可以做:
List<HashMap<String,String>> hashMaps = new ArrayList<HashMap<String,String>>();
List<Map<String,String>> maps = hashMaps; // Won't compile,
// but imagine that it could
Map<String,String> aMap = Collections.singletonMap("foo","bar"); // Not a HashMap
maps.add( aMap ); // Perfectly legal (adding a Map to a List of Maps)
// But maps and hashMaps are the same object, so this should be the same as
hashMaps.add( aMap ); // Should be illegal (aMap is not a HashMap)
所以这就是为什么 a of s 不应该是 a of s 的原因。List
HashMap
List
Map
不能将表达式的类型(如第一个)赋值。List<NavigableMap<String,String>>
(如果你想知道为什么你不能分配看到关于SO的其他问题。List<String>
List<Object>