这是我写的代码?
Set keys = map.keySet();
SortedSet s = new TreeSet(keys);
Run Code Online (Sandbox Code Playgroud)
我得到的警告是:
warning: [unchecked] unchecked call to TreeSet(java.util.Collection<? extends E>) as a
member of the raw type java.util.TreeSet
Run Code Online (Sandbox Code Playgroud)
如何摆脱编译器警告?
Jon*_*eet 62
理想情况下,完全开始使用泛型.你还没有表明它是什么类型map,但理想情况下你应该能够写出类似的东西:
Set<String> keys = map.keySet();
SortedSet<String> s = new TreeSet<String>(keys);
Run Code Online (Sandbox Code Playgroud)
那将map是一个类似的东西Map<String, Integer>.
如果map它本身是一个原始类型,那就更难了 - 再次,最好的解决方法是开始在整个代码库中添加泛型,摆脱原始类型.当然,如果从第三方代码返回地图,那并不总是可行的.在这种情况下,你可能需要抑制的警告,一个行你转换从原始类型泛型类型-可能通过Collections.checkedCollection-但在这之后,你应该能够使用通用型工作"正常".例如:
@SuppressWarnings("unchecked") // Just for this one statement
Collection<String> keys = Collections.checkedCollection(map.keySet(),
String.class);
// Now this statement is fully generic with no warnings
SortedSet<String> s = new TreeSet<String>(keys);
Run Code Online (Sandbox Code Playgroud)
Nis*_*ant 29
就这个问题而言,你应该使用参数化类型的键,例如
Set<TypeOfKeyObject> keys = map.keySet();
SortedSet<TypeOfKeyObject> s = new TreeSet<TypeOfKeyObject>(keys);
Run Code Online (Sandbox Code Playgroud)
TypeOfKeyObject对象中Key的对象类型在哪里map.
你可以强制压制警告(正如已经正确建议的那样)但不建议.
冒着听起来居高临下的风险,我建议你研究泛型.一个很好的起点是:http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html
| 归档时间: |
|
| 查看次数: |
87622 次 |
| 最近记录: |