区别在于,例如
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}
你可能会认为一个
List的
HashMapS的关系是一个
List的
MapS,但有一个很好的理由,为什么它不是:
假设您可以执行以下 *** 作:
List<HashMap<String,String>> hashMaps = new ArrayList<HashMap<String,String>>();List<Map<String,String>> maps = hashMaps; // Won't compile, // but imagine that it couldMap<String,String> aMap = Collections.singletonMap("foo","bar"); // Not a HashMapmaps.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 ashashMaps.add( aMap ); // Should be illegal (aMap is not a HashMap)
所以这就是为什么
List的
HashMap不是应该是一个
List的
Map秒。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)