我有点迷路了。我有代码(不是我写的),它有一个名为BitSetExt的类,它扩展了BitSet。签名看起来像:
private class BitSetExt extends BitSet implements Set<Integer>
stream()方法不会在扩展类中被覆盖。我知道这些代码在Java 1.6下可以很好地编译。在带有Java8的Eclipse中,我得到错误:
继承方法Collection.stream()、BitSet.stream()的返回类型不兼容。
如果我试图重写stream()并将IntStream返回类型更改为任何东西,我会得到一个不同的错误和建议将返回类型更改为IntStream(显然是不兼容的)。所以,我不理解什么,我怎么能修复这个代码?
谢谢你的帮助
从Java 8开始,BitSet有一个声明为
的方法IntStream stream()
和Set<Integer>
有一个同名的方法,声明为
Stream<Integer> stream()
由于这些方法具有相同的名称但返回类型不兼容,因此不可能同时扩展BitSet和实现Set。
你必须重构类,使它不再实现Set<Integer>
,例如,添加一个方法,返回视图对象,实现Set<Integer>
:
public Set<Integer> asSet();
这个类永远无法在Java 8中编译。
Set<Integer>
要求实现一个签名为
public Stream<Integer> stream();
而BitSet
提供了一个带有签名
public IntStream stream();
并且IntStream
不是Stream<integer>
的子类型。没有一种类型可以同时满足这两个要求。