在Java 8中使用Java 7 Comparators

tho*_*ens 17 java migration osgi java-8

情况

我有一个OSGi项目,我正在尝试迁移到Java 8.在我的项目中,我依赖于第三方库,我"OSGi-fied"(通过添加MANIFEST.MF文件并将元数据放入其中).这些库是从只读SVN存储库中检出的,所以我只需要在需要时检查更新,因此我不想进行任何其他更改,而不是在MANIFEST.MF文件中,因为我无法提交它们.

问题

但是,这些库使用了许多匿名比较器,如:

private static final Comparator heightComparator = new Comparator() {
    public int compare (Object o1, Object o2) {
        return ((Glyph)o1).getHeight() - ((Glyph)o2).getHeight();
    }
};
Run Code Online (Sandbox Code Playgroud)

现在,显然java.util.Comparator接口有一大堆需要实现的新方法(当然,这会导致编译错误).但我真的想避免实现它们或切换到Lambda表达式,因为修改原始源很可能每次检查更新版本时都会导致冲突.

Java曾经在向后兼容性方面努力工作,我想知道为什么这么简单且广泛使用的API部分需要(相对)大量迁移.我错过了什么或是否真的不可避免?

小智 22

我遇到了类似thobens的类似问题:更新了我的Kepler 4.2.3以使用Java 8,将JAVA 8设置为新的JRE等.就像thobens一样,我在比较器上遇到错误,eclipse要求我实现所有未实现的方法.

最后这是由旧的编译器编译级别(1.7)引起的 - 切换到1.8解决了这个问题.

  • 谢谢.方法如下:右键单击Package Explorer> Properties> Java Compiler> Compiler Compliance level:1.8中的项目 (3认同)

Stu*_*rks 9

Java 8版本中的新方法Comparator默认方法(Java 8中的一项新功能),它不仅包括方法签名,还包括默认实现.因此,Comparator如果以前工作过,旧的实现应该在Java 8上运行得很好.

如果某些内容无效,请告诉我们您正在尝试的内容以及错误消息.

  • 我假设它是项目属性和MANIFEST.MF文件中具有不同Java版本的Eclipse配置问题.我认为改变MANIFEST.MF中的Execution环境就足以让Eclipse使用Java 8作为源版本.谢谢你的帮助! (2认同)