在 Java 8 中使用 Java 7 比较器

2022-09-03 00:31:03

情况

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

问题

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

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

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

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


答案 1

我遇到了类似的问题,比如thobens:更新了我的开普勒4.2.3以使用Java 8,将JAVA 8设置为新的JRE等。像thobens一样,我在Compariators上遇到了一个错误,要求我实现所有未实现的方法。

最后,这是由旧的编译器编译级别(1.7)引起的 - 切换到1.8解决了这个麻烦。


答案 2

Java 8 版本中的新方法是默认方法(Java 8 中的新功能),它不仅包括方法签名,还包括默认实现。因此,如果较旧的实现以前工作过,那么它们在Java 8上应该可以正常工作。ComparatorComparator

如果某些内容不起作用,请告诉我们您正在尝试的内容以及错误消息是什么。


推荐