Java8 IntStream 不兼容的返回类型 for <Integer>Collections.stream()



我有点迷路了。我有代码(不是我写的),它有一个名为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>的子类型。没有一种类型可以同时满足这两个要求。

最新更新