繁体   English   中英

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

[英]Java8 IntStream incompatible return type for Collections<Integer>.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>的子类型。 没有类型可以满足这两个要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM