【发布时间】:2015-03-28 00:02:27
【问题描述】:
我尝试在 Eclipse 上重现代码 below。我收到一条错误消息,告诉我必须实现所有继承的方法(因为 Comparator 是一个接口)。
类型
new Comparator(){}必须实现继承的抽象方法Comparator.reversed()。
这些方法有很多,我想覆盖的唯一一个是比较。我必须实现所有其他方法还是有办法指定我不需要实现它们? 我understand 说我必须这样做,因为接口的合同性质,但是如果我只需要更改一种方法怎么办?
static Map sortByValue(Map map) {
List list = new LinkedList(map.entrySet());
Collections.sort(list, new Comparator() {
public int compare(Object o1, Object o2) {
return ((Comparable) ((Map.Entry) (o1)).getValue())
.compareTo(((Map.Entry) (o2)).getValue());
}
});
Map result = new LinkedHashMap();
for (Iterator it = list.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry)it.next();
result.put(entry.getKey(), entry.getValue());
}
return result;
}
编辑 通过在 eclipse luna 中将合规级别更改为 java8 来解决。谢谢!
【问题讨论】:
-
不确定你在说什么。编译得很好。
-
您确定在您的代码中根本不应该使用任何类型的泛型吗?这适用于 Java 1.4 吗?
-
@mbomb007,你意识到 OP 已经在他的帖子中链接到这个问题了吗?
-
这是一个疯狂的猜测:我认为您在 Java8 之前的 Eclipse(即 Luna 之前)中使用 Java8。所以 Eclipse 并不知道所有这些新的 Comparator 方法,比如
thenComparing,都有一个default实现。
标签: java eclipse java-8 comparator