sta*_*low 6 java oop stream java-stream
我刚开始学习 Java Streams,我有一个问题。让我很困惑的事情如下:
我刚刚检查了 AutoCloseable 接口,它包含 close() 方法。
BaseStream 接口扩展了 AutoCloseable 接口,并提供了继承规则,这意味着可以从 BaseStream 接口使用 close() 方法。
Stream 接口扩展了 BaseStream 接口,并提供了继承规则,这意味着可以从 Stream 接口使用 close() 方法。
此外,抽象类 AbstractPipeline 实现了 BaseStream 接口,并提供了 close() 方法的实现。
这是前面描述的图。
List<String> stringList = new ArrayList<>();
Stream<String> stringStream = stringList.stream();
stringStream.close();
Run Code Online (Sandbox Code Playgroud)
当我按住 Ctrl 键盘按钮并单击鼠标左键时,它指向 BaseStream 接口中 close() 方法的抽象,但是当我按下 Ctrl+Alt+B 时,它指向我中方法的实现AbstractPipeline 抽象类。
问题是:
当 Stream 和 AbstractPipeline 不交互并且它们的主要连接是 BaseStream 时,Stream 调用的 close() 方法如何将我指向 AbstractPipeline 抽象类中的 close() 方法的实现?
这是某种我不知道的面向对象的概念吗?
谢谢你。
更新:
我正在使用 IntelliJ IDEA 2020.1.2(终极版)和 JDK 1.8,但我也尝试过使用 JDK 14 和 Eclipse IDE for Enterprise Java Developers 版本 2019-06 (4.12.0),结果是一样的。
有一个抽象类ReferencePipeline,它扩展了抽象类AbstractPipeline并实现了Stream,但没有重写close()方法。这个抽象类是我一直在寻找的联系和答案。现在,一切看起来都很合理,对我来说也很清楚。这是完整的图表,它清楚了这个问题的答案。
感谢所有参与并帮助我找到答案的人。干杯!