java - 从 Stream 调用的 close() 方法如何指向 AbstractPipeline 抽象类中 close() 方法的实现?

标签 java oop stream java-stream

我刚开始学习 Java Streams,我有一个问题。让我很困惑的是以下几点:

  • 我刚刚检查了 AutoCloseable 接口(interface),它包含 close() 方法。
  • BaseStream 接口(interface)扩展了 AutoCloseable 接口(interface),并提供了继承规则,这意味着可以从 BaseStream 接口(interface)使用 close() 方法。
  • Stream 接口(interface)扩展了 BaseStream 接口(interface),并提供了继承规则,这意味着可以从 Stream 接口(interface)使用 close() 方法。
  • 此外,抽象类 AbstractPipeline 实现了 BaseStream 接口(interface),并提供了 close() 方法的实现。

  • 这是diagram的前面描述的。
    List<String> stringList = new ArrayList<>();
    Stream<String> stringStream = stringList.stream();
    stringStream.close();
    
    当我按住 Ctrl 键盘按钮并单击鼠标左键时,它指向 BaseStream 接口(interface)中 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() 方法。这个抽象类是我一直在寻找的连接和答案。现在,一切都很合理,对我来说很清楚。这是完整的图表,它清楚地回答了这个问题。
    enter image description here
    感谢所有参与并帮助我找到答案的人。
    干杯!

    关于java - 从 Stream 调用的 close() 方法如何指向 AbstractPipeline 抽象类中 close() 方法的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62699892/

    相关文章:

    java - 如何找到文本文件中最小的数字? ( java )

    java - 从某个字节开始下载

    java - 条件实例 signalAll() 不返回

    oop - 从字符串动态创建选择器

    facebook - 如何嵌入 jwplayer 以便它在 Facebook 流中内联播放?

    c# - 打开 BinaryReader 时使用 Stream.Seek 是否安全?

    c# - 使用 TextWriter 时如何截断流

    java - 无法解析自定义Java日期: Can I set it to a default year?

    performance - Matlab的Get Property函数导致性能问题

    php - PHP如何覆盖父对象的静态属性并让父对象访问新值?