Gum*_*ron 13 interface backwards-compatibility java-8 spliterator
在Java 1.8.0_25发布之后,有一个有趣的情况...我认为我的问题的根源主要与Interfaces中"默认"实现的新(到1.8)功能有关.
我正在开发的应用程序目前的目标是1.7,到目前为止一直运行良好.直到用户开始更新到1.8.现在我们的用户已经开始更新到1.8,我们的手被迫转向1.8支持.
我们已经修复了大部分问题(主要与1.7和1.8之间的JavaFX包的更改有关),但还有一个棘手的问题.
在我的智慧或缺乏中,我不久前决定创建一个从AbstractList <T>扩展的SortedList <T>.到目前为止,这个类运行良好,但是当在1.8运行时运行时,我得到:
Duplicate methods named spliterator with the parameters () and () are inherited
from the types Collection<T> and Iterable<T>
Run Code Online (Sandbox Code Playgroud)
对我来说,这似乎是由AbstractList <T>实现的一些接口中的"默认"实现引起的(我的SortedList <T>类没有实现除Serializable之外的任何其他接口).实现Serializable是我们的另一个问题,因为我们需要支持SortedList <T>对象的反序列化,没有办法解决这个问题!).
我可以通过在SortedList <T>类中提供spliterator()的覆盖实现来消除错误.但是,如果构建它,它将不再在Java 1.7环境中运行.如果我尝试使用1.7运行时的SortedList <T>,我得到:
Problem:
Error: Unresolved compilation problems:
The import java.util.Spliterator cannot be resolved
Spliterator cannot be resolved to a type
com.xxxx.xxxx.util.SortedList.<init>(SortedList.java:13)
Run Code Online (Sandbox Code Playgroud)
这个错误非常明显,因为我们现在已经覆盖了SortedList <T>中的spliterator()方法,它需要包含java.util.Spliterator,但1.7中不存在.
理想情况下,如果他们不愿意,我们不希望我们的客户更新到Java 1.8.
我们的手被逼到了吗?我们是否需要强制用户更新到1.8,并为自己更新为1.8的用户推出新版本?
有没有人知道解决这个问题的方法?
在一个更哲学的说明中,为什么接口已被实现损坏:-(.可能是一个漂亮的新功能,但它们确实应该避免做任何会导致对现有代码进行重大更改的事情,特别是在列表如此基本的事情上/收藏等
任何有关这种困境的帮助或建议将不胜感激.
干杯,
标记
好吧,所以你们俩(@Holger 和 @assylias)都是正确的......但是,我们的情况有点复杂。
我们工作的环境是 Eclipse 3.8.1,它不支持 Java 8(据我所知,将来也不会支持)。因此,我们不能仅仅更改为 Java 8 编译器来解决问题。
我们的产品是一个相当大的 Eclipse RCP 应用程序。目前无法升级 IDE,因为这会涉及重大返工。因此我们需要在Java 1.7环境下继续开发。
如果有人感兴趣,我们已通过以下方式解决了该问题:
这可能不是一个理想的解决方案,但我们认为它会起作用:-)。
感谢您的意见和建议,非常感谢。
| 归档时间: |
|
| 查看次数: |
6979 次 |
| 最近记录: |