小编Gum*_*ron的帖子

Java 8:Spliterator,Iterator,Collection和Interfaces中的"默认"实现(名为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的用户推出新版本?

有没有人知道解决这个问题的方法?

在一个更哲学的说明中,为什么接口已被实现损坏:-(.可能是一个漂亮的新功能,但它们确实应该避免做任何会导致对现有代码进行重大更改的事情,特别是在列表如此基本的事情上/收藏等

任何有关这种困境的帮助或建议将不胜感激.

干杯,

标记

interface backwards-compatibility java-8 spliterator

13
推荐指数
1
解决办法
6979
查看次数