为了账号安全,请及时绑定邮箱和手机立即绑定

Eclipse IDE Java 隐式转换

Eclipse IDE Java 隐式转换

萧十郎 2021-05-31 08:19:37
在将我的 Eclipse IDE 安装从 Oxygen.3a (4.7.3) 更新到 Photon 时,我注意到尽管之前编译(和工作)正常,但我的一些代码已经损坏。考虑以下代码:import java.util.ArrayList;import java.util.stream.Stream;public class Test {    class MyClass {    }    interface MyInterface {    }    public static void main(String[] args) {        Stream<MyClass> myClassStream = new ArrayList<MyClass>().stream();        Stream<MyInterface> myInterfaceStream = new ArrayList<MyInterface>().stream();        Stream<MyInterface> concatenation = Stream.concat(                // Tooltip for filter() displays the result type of Stream<MyClass>                myClassStream.filter(element -> element instanceof MyInterface),                // Tooltip displays type Stream<MyInterface>                myInterfaceStream);    }}在 Photon 中,会出现一个错误,指出Stream.concat返回的是Stream<Object>,而不是Stream<MyInterface>。在 Oxygen 中,它没有(返回类型是Stream<MyInterface>)。看起来有些东西隐式地将返回类型转换filter为Stream<? extends MyClass, MyInterface>,然后导致Stream.concat返回预期类型。当然,这在语义上是安全的,因为返回的流中的所有元素都filter实现了MyInterface。为什么这段代码会破解?我怎么能得到以前的行为?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 178 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信