I have class that implements Set and List. Programs works fine in Java6 and Java7
public class SetList<V> implements Set<V>, List<V>
{
....
}
With Java 8 , this does not compile. Error is
java: class trials.SetList inherits unrelated defaults for spliterator() from types java.util.Set and 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);
}
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.)
This is Diamond Problem that causes in Multiple inheritance.
In Java , compile error prevents this problem. For resolving this You should implement yours one
While it is unusual that a class implements both
List
andSet
, there are some situations, where aSet
can also support being a somewhat limitedList
.Personally, I prefer to declare an
asList()
method in these cases, instead of implementing bothList
andSet
at the same time. Something like this:On the other hand, if you already have an existing class, that implements both
List
andSet
, then the simplest solution for your problem is perhaps to explicitly call one of the superspliterator()
methods: