class从类型java.util.Set和java.util.Listinheritancespliterator()的无关默认值
我有实现Set和List的类。 程序在Java6和Java7中运行良好
public class SetList implements Set, List { .... }
使用Java 8,这不会编译。 错误是
java:class trials.SetList从类型java.util.Set和java.util.Listinheritancespliterator()的无关默认值
爪哇/ UTIL / Set.java:394
... @Override default Spliterator spliterator() { return Spliterators.spliterator(this, Spliterator.DISTINCT); }
的java / UTIL / List.java
... @Override default Spliterator spliterator() { return Spliterators.spliterator(this, Spliterator.ORDERED); }
这是否意味着我不能拥有在Java 8中同时实现Set和List的类? (现在看来已经到了支付技术债务的时候了。)
虽然类实现List
和Set
是不常见的,但在某些情况下, Set
也可以支持有限的List
。
就个人而言,我更喜欢在这些情况下声明一个asList()
方法,而不是同时实现List
和Set
。 像这样的东西:
public class SetList implements Set { public List asList(){ // return a list representation of this Set } }
另一方面,如果您已经有一个现有的类,它同时实现了List
和Set
,那么对于您的问题最简单的解决方案可能是显式调用其中一个超级spliterator()
方法:
public class SetList implements Set , List { @Override public Spliterator spliterator() { return List.super.spliterator(); } }
这是导致多重inheritance的钻石问题 。
“钻石问题”(有时被称为“死亡的致命钻石”)是一种歧义,当两个B和C类inheritance自A,而D类inheritance自B和C时会出现歧义。如果A中有一个方法B和C已经覆盖了,而D没有覆盖它,那么Dinheritance的方法的哪个版本:B的那个,还是C的那个?
在Java中,编译错误可以防止出现此问题。 要解决这个问题,你应该实施一个
- 如果抛出exception,则使用非零代码创建一个spring-batch作业出口
- 如何使用Spring MVC创建自己的filter?
- 绝对定位(无布局管理器)与MiGlayout中的绝对定位
- 如何使用javax.ws.rs.client.WebTarget从REST客户端发送json对象
- javax.el.PropertyNotFoundException:/demo.xhtml @ 24,55 value =“#{UserBean.favYear3}”:目标无法访问,标识符’UserBean’已解析为null
- 如何关闭log4j警告?
- JScrollPane不适用于我的JPanel
- 如何使输出出现在不同的列中?
- BouncyCastle安装问题