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

Way*_*e Y 5 java java-8

我有点迷失了.我有一个代码(我没写),它有一个名为BitSetExt的类,它扩展了BitSet.签名如下:

private class BitSetExt extends BitSet implements Set<Integer>
Run Code Online (Sandbox Code Playgroud)

stream()方法不会在扩展类中重写.我知道代码在Java 1.6中编译得很好.在使用Java8的Eclipse中,我收到错误:

返回类型与继承的方法Collection.stream(),BitSet.stream()不兼容.

如果我尝试覆盖stream()并将IntStream返回类型更改为任何东西,我会得到一个不同的错误,并建议将返回类型更改为IntStream(显然不兼容).那么,我不理解什么,如何修复此代码?

谢谢你的帮助.

JB *_*zet 8

从Java 8开始,BitSet有一个声明为的方法

IntStream stream()
Run Code Online (Sandbox Code Playgroud)

并且Set<Integer>有一个同名的方法,声明为

Stream<Integer> stream()
Run Code Online (Sandbox Code Playgroud)

由于这些方法具有相同的名称但返回类型不兼容,因此无法同时扩展BitSet并实现Set.

您将不得不重构该类以使其不再实现Set<Integer>,例如,添加一个返回对象视图的方法,实现Set<Integer>:

public Set<Integer> asSet();
Run Code Online (Sandbox Code Playgroud)

  • 或者 - 可能是一个更好的主意 - 让你的实现有一个`BitSet`并实现`Set`,这可能是一个更强大的接口. (5认同)

Sot*_*lis 6

该类永远不会在Java 8中编译.

Set<Integer> 要求您使用签名实现方法

public Stream<Integer> stream();
Run Code Online (Sandbox Code Playgroud)

while BitSet提供签名的实现

public IntStream stream();
Run Code Online (Sandbox Code Playgroud)

并且a IntStream不是子类型Stream<integer>.没有类型可以满足这两个要求.