class从类型java.util.Set和java.util.List继承spliterator()的无关默认值 [英] class inherits unrelated defaults for spliterator() from types java.util.Set and java.util.List
问题描述
我有实现Set和List的类。程序在Java6和Java7中工作正常
I have class that implements Set and List. Programs works fine in Java6 and Java7
public class SetList<V> implements Set<V>, List<V>
{
....
}
使用Java 8 ,这不编译。错误是
With Java 8 , this does not compile. Error is
java:class trials.SetList从类型java.util.Set和java继承
spliterator()的无关默认值.util.List
java: class trials.SetList inherits unrelated defaults for spliterator() from types java.util.Set and java.util.List
java / util / Set.java:394
java/util/Set.java:394
...
@Override
default Spliterator<E> spliterator() {
return Spliterators.spliterator(this, Spliterator.DISTINCT);
}
java / util / List.java
java/util/List.java
...
@Override
default Spliterator<E> spliterator() {
return Spliterators.spliterator(this, Spliterator.ORDERED);
}
这是否意味着我不能拥有在Java 8中同时实现Set和List的类? (现在看来已经到了支付技术债务的时候了。)
Does it mean I cannot have class that implement both Set and List in Java 8? (It looks like time has come to pay our technical debts.)
推荐答案
虽然一个类实现了两个列表
和设置
,在某些情况下, Set
可以还支持一个有限的列表
。
While it is unusual that a class implements both List
and Set
, there are some situations, where a Set
can also support being a somewhat limited List
.
就个人而言,我更喜欢声明一个 asList ()
这些情况下的方法,而不是同时实现 List
和 Set
时间。这样的事情:
Personally, I prefer to declare an asList()
method in these cases, instead of implementing both List
and Set
at the same time. Something like this:
public class SetList<V> implements Set<V> {
public List<V> asList(){
// return a list representation of this Set
}
}
另一方面,如果你已经有一个现有的类,它实现 List
和 Set
,那么对你的问题最简单的解决方案可能是显式调用一个超级 spliterator()
方法:
On the other hand, if you already have an existing class, that implements both List
and Set
, then the simplest solution for your problem is perhaps to explicitly call one of the super spliterator()
methods:
public class SetList<V> implements Set<V>, List<V> {
@Override
public Spliterator<V> spliterator() {
return List.super.spliterator();
}
}
这篇关于class从类型java.util.Set和java.util.List继承spliterator()的无关默认值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!