在将我的 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。为什么这段代码会破解?我怎么能得到以前的行为?
添加回答
举报
0/150
提交
取消