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

时间:2015-05-25 20:22:19

标签: java java-8

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

private class BitSetExt extends BitSet implements Set<Integer>

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

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:8)

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

IntStream stream()

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

Stream<Integer> stream()

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

您必须重构该类,以便它不再实现Set<Integer>,例如,添加一个方法,在该对象上返回视图,实现{{ 1}}:

Set<Integer>

答案 1 :(得分:6)

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

Set<Integer>要求您使用签名

实现方法
public Stream<Integer> stream();

BitSet提供带签名的实现

public IntStream stream();

IntStream不是Stream<integer>的子类型。没有任何类型可以满足这两个要求。