gpt4 book ai didi

java - 类从类型 java.util.Set 和 java.util.List 继承 spliterator() 的无关默认值

转载 作者:搜寻专家 更新时间:2023-10-30 19:42:31 25 4
gpt4 key购买 nike

我有实现 Set 和 List 的类。程序在 Java6 和 Java7 中运行良好

public class SetList<V> implements Set<V>, List<V>
{
....
}

在 Java 8 中,这不会编译。错误是

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);
}

这是否意味着我不能在 Java 8 中拥有同时实现 Set 和 List 的类? (看起来是时候偿还我们的技术债了。)

最佳答案

虽然一个类同时实现 ListSet 是不常见的,但在某些情况下,Set 也可以支持作为一个List 有点受限。

就个人而言,我更喜欢在这些情况下声明一个 asList() 方法,而不是同时实现 ListSet .像这样:

public class SetList<V> implements Set<V> {
public List<V> asList(){
// return a list representation of this Set
}
}

另一方面,如果您已经有一个现有的类,它同时实现了 ListSet,那么针对您的问题最简单的解决方案可能是显式调用一个 super spliterator() 方法:

public class SetList<V> implements Set<V>, List<V> {
@Override
public Spliterator<V> spliterator() {
return List.super.spliterator();
}
}

关于java - 类从类型 java.util.Set 和 java.util.List 继承 spliterator() 的无关默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22746948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com