【发布时间】:2014-03-30 17:02:51
【问题描述】:
我有实现 Set 和 List 的类。程序在 Java6 和 Java7 中运行良好
public class SetList<V> implements Set<V>, List<V>
{
....
}
对于 Java 8,这不会编译。错误是
java: 类 trial.SetList 继承了不相关的默认值 spliterator() 来自 java.util.Set 和 java.util.List 类型
java/util/Set.java:394
...
@Override
default Spliterator<E> spliterator() {
return Spliterators.spliterator(this, Spliterator.DISTINCT);
}
java/util/List.java
...
@Override
default Spliterator<E> spliterator() {
return Spliterators.spliterator(this, Spliterator.ORDERED);
}
这是否意味着我不能拥有在 Java 8 中同时实现 Set 和 List 的类? (看来是时候偿还我们的技术债务了。)
【问题讨论】:
-
提供你自己的
spliterator()实现。 -
一个类如何实现Set和List?他们有相互矛盾的合同。这听起来是个非常糟糕的主意。
-
@Sotirios Delimanolis - 谢谢,这可能是答案。
-
它将解决编译问题,但问题确实是@JBNizet 所说的。
-
你不能在任何版本的Java中正确实现
Set和List。
标签: java java-8 technical-debt