Java 没有实现接口的所有方法
我尝试在eclipse上复制代码。我得到一个错误,告诉我必须实现所有继承的方法(因为Comparator是一个接口) 类型Java 没有实现接口的所有方法,java,eclipse,java-8,comparator,Java,Eclipse,Java 8,Comparator,我尝试在eclipse上复制代码。我得到一个错误,告诉我必须实现所有继承的方法(因为Comparator是一个接口) 类型newcomparator(){}必须实现继承的抽象方法Comparator.reversed() 这些方法有很多,我只想覆盖比较。我是否必须实现所有其他方法,或者是否有办法指定我不需要实现它们? 我认为我必须这样做,因为接口的契约性质,但是如果我只需要更改一种方法呢 static Map sortByValue(Map map) { List list = new
newcomparator(){}
必须实现继承的抽象方法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;
}
编辑
通过在EclipseLuna中将遵从性级别更改为java8解决了这个问题。谢谢 抽象类可能更适合您所做的工作。尽管您可以
.super()
一切
类型newcomparator(){}
必须实现继承的抽象方法Comparator.reversed()
,然后如果我应用修复,我会添加许多函数
Comparator.reversed
是在Java 1.8中引入的,它是一种无需重写的方法
在使用Java1.8API时(因为Comparator
有一个reversed
方法),您的遵从性级别似乎设置为Java1.8之前的版本(因为Eclipse要求您重写reversed
)
确保将API更改为1.7或将法规遵从性级别更改为1.8。(后一个选项需要Eclipse Luna或更高版本。)
有关Eclipse遵从性级别的更多信息:
这是一种猜测:我认为您在Java 8-Eclipse之前(即Luna之前)使用Java 8。通过这种方式,Eclipse不知道所有这些新的比较器方法,比如
然后比较
,都有一个默认实现
,Comparator只有方法compare
,而in有更多的方法,所有这些方法都直接在接口中有一个默认实现,不需要在子类中实现
我建议您切换到最新版本的Eclipse,它应该是Luna。或者,您也可以为EclipseKepler安装补丁,但切换到Luna肯定更好。接口的目的是使所述接口的实现者有义务在此处列出所有方法。现在有几种方法可以避免实现所有的方法
您遇到了Eclipse错误:
基本上,Java1.8引入了一个全新的方法Comparator.reversed()。由于您有JAVA 1.7或更早版本的代码,JAVA 1.8找不到该方法并且无法编译。不确定您在说什么。编译起来很好。可能是的重复。您确定不应该在代码中使用任何类型的泛型吗?这是针对Java1.4的吗?@mbomb007,你知道OP在他的帖子中已经链接到了这个问题吗?这是一个大胆的猜测:我认为你在Java8-Eclipse之前(即Luna之前)使用Java8。所以Eclipse不知道所有这些新的比较器方法,比如
然后比较
,都有一个默认的
实现。这不是说一个实现接口的抽象类吗?不,我的意思是将它重写为一个抽象类,这样,您可以选择实现什么。我相信java swing对于事件监听器有这样的解决方案,我只是记不起它们叫什么了。你能举个例子吗?(我应该把super放在哪里?)适配器类就是我在书中读到的所谓的类。您应该有一个实现接口的抽象类,但从长远来看,您必须在以后的某个地方实现所有函数,希望它能让senseJust对此进行测试,至少在Luna中,符合性级别为1.7的项目可以使用1.8 JDK构建,并且不需要实现所有这些方法……好的。不管怎样,这样的设置对我来说似乎是坏的。