class从类型java.util.Set和java.util.List继承spliterator()的无关默认值 [英] class inherits unrelated defaults for spliterator() from types java.util.Set and java.util.List

查看:305
本文介绍了class从类型java.util.Set和java.util.List继承spliterator()的无关默认值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有实现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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆