猿问

Eclipse IDE Java 隐式转换

在将我的 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。


为什么这段代码会破解?我怎么能得到以前的行为?


萧十郎
浏览 179回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答