Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有实现接口的所有方法_Java_Eclipse_Java 8_Comparator - Fatal编程技术网

Java 没有实现接口的所有方法

Java 没有实现接口的所有方法,java,eclipse,java-8,comparator,Java,Eclipse,Java 8,Comparator,我尝试在eclipse上复制代码。我得到一个错误,告诉我必须实现所有继承的方法(因为Comparator是一个接口) 类型newcomparator(){}必须实现继承的抽象方法Comparator.reversed() 这些方法有很多,我只想覆盖比较。我是否必须实现所有其他方法,或者是否有办法指定我不需要实现它们? 我认为我必须这样做,因为接口的契约性质,但是如果我只需要更改一种方法呢 static Map sortByValue(Map map) { List list = new

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

类型
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肯定更好。

接口的目的是使所述接口的实现者有义务在此处列出所有方法。现在有几种方法可以避免实现所有的方法

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

  • 或者,您可以按照Java开发人员对一些声明了许多方法的接口所做的操作,例如:。这样,您将实现每个方法,但它们不会做任何有用的事情

  • 您遇到了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构建,并且不需要实现所有这些方法……好的。不管怎样,这样的设置对我来说似乎是坏的。