没有实现接口的所有方法

我尝试在eclipse上复制下面的代码。 我收到一个错误,告诉我必须实现所有inheritance的方法(因为Comparator是一个接口)。

new Comparator(){}必须实现inheritance的抽象方法Comparator.reversed()

有许多这些方法,我想要覆盖的唯一方法是比较。 我是否必须实现所有其他方法,或者有没有办法指定我不需要实现它们? 我知道由于接口的契约性质,我必须这样做,但是如果我只需要更改一个方法怎么办?

 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来解决。 谢谢!

new Comparator(){}必须实现inheritance的抽象方法Comparator.reversed()然后如果我应用修复,我添加了很多函数

Comparator.reversed是在Java 1.8中引入的,它是一个默认方法,即您不必覆盖的方法。

看起来您的合规性级别已设置为Java 1.8之前(因为Eclipse要求您覆盖reversed ),而使用Java 1.8 API(因为Comparator具有reversed方法)。

确保将API更改为1.7将合规性级别更改为1.8 。 (后一种选择需要Eclipse Luna或更好。)

有关Eclipse合规性级别的更多信息:Eclipse 中的“编译器合规级别”是什么?

这是一个疯狂的猜测:我认为你在Java 8-Eclipse之前使用Java 8(即前Luna)。 这样,Eclipse就不知道所有那些新的Comparator方法(如thenComparing )都有默认实现。

在Java 7中 ,Comparator只有方法compare ,而在Java 8中有更多的方法,所有这些方法都直接在接口中有一个默认实现,不需要在子类中实现。

我建议你切换到Eclipse的最新版本,它应该是Luna。 或者,您也可以为Eclipse Kepler安装补丁,但切换到Luna肯定更好。

接口的目的是强制所述接口的实现者具有其中列出的所有方法。 现在有几种方法可以实现不实现所有方法。

  1. 对于您不希望实现的每个方法(支持),只需抛出UnsupportedOperationException 。 这种实现的一个例子是Collections API 。

为了保持核心集合接口的数量可管理,Java平台不为每个集合类型的每个变体提供单独的接口。 (这些变体可能包括不可变,固定大小和仅附加。)相反,每个接口中的修改操作都被指定为可选 – 给定的实现可以选择不支持所有操作。 如果调用了不受支持的操作,则集合将抛出UnsupportedOperationException。 实现负责记录它们支持哪些可选操作。 所有Java平台的通用实现都支持所有可选操作。

  1. 或者你可以按照Java开发人员对一些声明很多方法的接口所做的事情,例如: MouseAdapter 。 这样你就可以实现每个方法,但是它们不会做任何有用的事情。

抽象类可能更适合您正在做的事情。 虽然你可以只是.super()一切。

你遇到了一个Eclipse bug: https : //bugs.eclipse.org/bugs/show_bug.cgi?id = 390889

基本上,JAVA 1.8引入了一种全新的方法Comparator.reversed()。 由于你有一个JAVA 1.7或更早的代码,JAVA 1.8找不到该方法并且无法编译。