在
Java 1.8.0_25发布到野外之后,有一个有趣的情况…我相信我的问题的根源主要是与Interfaces中的“默认”实现的新功能(至1.8)相关.
我正在开展的应用程序目前的目标是1.7,到目前为止,工作良好.直到用户开始更新到1.8.现在我们的用户已经开始更新到1.8,我们的手被迫转为1.8支持.
我们修复了大多数问题(主要涉及到1.7和1.8之间的JavaFX软件包的更改),但仍有一个令人烦恼的问题.
在我的智慧或缺乏的情况下,我之前决定创建一个SortedList< T>其从AbstractList< T>延伸.直到现在,这个类工作正常,但是在1.8运行时运行时,我得到:
Duplicate methods named spliterator with the parameters () and () are inherited
from the types Collection and Iterable
对我来说,这似乎是由AbstractList< T>实现的一些接口中的“默认”实现引起的. (我的SortedList< T>类不实现除Serializable之外的任何附加接口).实现Serializable是我们的另一个问题,因为我们需要支持SortedList< T>的反序列化对象,没有办法!).
我可以通过在SortedList< T>中提供spliterator()的覆盖实现来摆脱错误.类.但是,如果这是构建的,它不再在Java 1.7环境中运行.如果我尝试使用SortedList< T>有一个1.7运行时,我得到:
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.(SortedList.java:13)
这个错误很明显,因为我们现在已经在SortedList< T>中覆盖了spliterator()方法.它需要包括java.util.Spliterator,但在1.7中不存在.
理想情况下,如果不想要,我们不要求我们的客户更新到Java 1.8.
我们的手被迫在这里吗?我们是否需要强制将用户更新为1.8,并向自己更新为1.8的用户推出新版本?
有人知道这个问题吗?
在一个更哲学的笔记上,为什么接口被破坏与实现:-(可能是一个漂亮的新功能,但他们真的应该避免做任何会导致破坏现有代码的变化,特别是在一些如此重要的列表/收藏等
对这种困境的任何帮助或建议将不胜感激.
干杯,
标记