在为 LongAdder 引用 JavaDocs 时,它扩展了 Number 类。
然后在查看源代码时,它是从 Striped64
扩展而来的这让我很困惑,为什么我们不能在 javadocs 中指定 LongAdder extending from Striped64 class ? 是因为 Striped64 扩展了 Number 吗?
最佳答案
Which class does LongAdder extends?
如源代码所示,它扩展了 Striped64
。但是,由于该类不是公共(public) API,因此 Javadoc 不会告诉您。
默认情况下,Javadoc 只为public
和protected
成员生成文档;换句话说,只有公共(public) API 被记录1。 Striped64
类是包私有(private)的,因此没有记录。由于该类未记录,因此会找到下一个最近的记录祖先,在本例中恰好是 Number
。请注意,您可能有一个记录类 Foo
,它有 15 个以上的祖先,但如果这些祖先都不是公共(public) API,Javadoc 将显示 Foo extends Object
。
从公共(public) API 与私有(private) API 的角度来看,LongAdder
扩展 Striped64
这一事实是无关紧要的。后一类是实现细节(即私有(private) API)。它是定义库契约的公共(public) API;因此,在这种情况下,用户只关心 LongAdder
是 Number
的子类。
如果需要,您可以配置 Javadoc 来记录所有内容,包括包私有(private)和 private
成员。但是,生成的文档可能只能供私有(private)使用(例如,供维护库的组织内部使用)。
1。使 API 公开或私有(private)的原因不仅仅基于可见性修饰符。该类位于哪个包中也是相关的。例如,JDK 中有许多包中的类,其前缀为com.sun
、oracle
、jdk.internal
等。这些包中的类是私有(private) API,因此未记录在公开可用的 Javadoc 中。
随着模块的出现,“私有(private)包”的概念在 Java 9 中获得了更多的正式地位。现在您可以显式声明模块导出哪些包,这是由运行时强制执行的。
关于java - LongAdder 扩展了哪个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56945073/