这样可行:
Map aMap;
aMap = new HashMap<String, TreeSet<String>>();
Run Code Online (Sandbox Code Playgroud)
这不编译:
Map<String, Set<String>> aMap;
aMap = new HashMap<String, TreeSet<String>>();
Run Code Online (Sandbox Code Playgroud)
错误信息:
Compilation failed (26/05/2014 11:45:43) Error: line 2 - incompatible types -
found java.util.HashMap<java.lang.String,java.util.TreeSet<java.lang.String>>
but expected java.util.Map<java.lang.String,java.util.Set<java.lang.String>>
Run Code Online (Sandbox Code Playgroud)
为什么?
ass*_*ias 10
第一个可行,因为您使用原始类型(没有通用),因此您可以在其中放置任何类型的地图.
第二个不起作用,因为a XXX<Set>不是aXXX<TreeSet>.
所以你需要选择:
Map<String, Set<String>> aMap = new HashMap<String, Set<String>>();
//or
Map<String, TreeSet<String>> aMap = new HashMap<String, TreeSet<String>>();
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,您都可以写:
aMap.put("abc", new TreeSet<>());
Run Code Online (Sandbox Code Playgroud)
主要区别在于,当您从地图获取项目时,使用前一个构造,您将无法访问TreeSet特定方法.
最后,使用Java 7+,您可以省略右侧的通用信息,编译器将自动为您确定:
Map<String, Set<String>> aMap = new HashMap<>();
Map<String, TreeSet<String>> aMap = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
291 次 |
| 最近记录: |