未经检查的compareTo调用
背景
创建一个可以按值排序的Map
。
问题
代码按预期执行,但编译不干净:
public class SortableValueMap<K, V> extends LinkedHashMap<K, V> {
...
public void sortByValue() {
...
Collections.sort( list, new Comparator<Map.Entry>() {
public int compare( Map.Entry entry1, Map.Entry entry2 ) {
return ((Comparable)entry1.getValue()).compareTo( entry2.getValue() );
}
});
...
语法用于将 Comparable
作为通用参数传递给 Map.Entry
(其中 V
必须是 Comparable
code>?) - 这样警告中显示的 (Comparable)
类型转换就可以被删除 - 我感到困惑。
警告
编译器的脾气暴躁的抱怨:
SortableValueMap.java:24:警告:[未检查]未检查调用compareTo(T)作为原始类型java.lang.Comparable的成员
return ((Comparable)entry1.getValue()).compareTo(entry2.getValue() );
问题
如何将代码更改为在没有任何警告的情况下进行编译(在使用 < 编译时不抑制它们)代码>-Xlint:未选中)?
相关
- TreeMap 按值排序
- 对映射<键、值>进行排序按值 (Java)
- http:// paaloliver.wordpress.com/2006/01/24/sorting-maps-in-java/
谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
声明
V
类型以扩展Comparable
接口。这样,您就可以将Map.Entry
对象的转换删除为(Comparable)
并使用推断的类型:...
Declare the
V
type to extend theComparable<V>
interface. That way, you can remove the cast of theMap.Entry
objects down to(Comparable)
and use the inferred type instead:....
该值应该是可比较的子类。
尝试以上方法。
The value should be a subclass of comparable.
Try the above.
怎么样:
但这可能会更好,具体取决于您的意图:
请参阅 http: //download.oracle.com/javase/tutorial/extra/generics/morefun.html
How about:
but this may be better, depending on your intent:
See http://download.oracle.com/javase/tutorial/extra/generics/morefun.html