java - LongAdder 扩展了哪个类?

标签 java inheritance java-8

在为 LongAdder 引用 JavaDocs 时,它扩展了 Number 类。

Java docs LongAdder

然后在查看源代码时,它是从 Striped64

扩展而来的

LongAdder source code

这让我很困惑,为什么我们不能在 javadocs 中指定 LongAdder extending from Striped64 class ? 是因为 Striped64 扩展了 Number 吗?

最佳答案

Which class does LongAdder extends?

如源代码所示,它扩展了 Striped64。但是,由于该类不是公共(public) API,因此 Javadoc 不会告诉您。


默认情况下,Javadoc 只为publicprotected 成员生成文档;换句话说,只有公共(public) API 被记录1Striped64 类是包私有(private)的,因此没有记录。由于该类未记录,因此会找到下一个最近的记录祖先,在本例中恰好是 Number。请注意,您可能有一个记录类 Foo,它有 15 个以上的祖先,但如果这些祖先都不是公共(public) API,Javadoc 将显示 Foo extends Object

从公共(public) API 与私有(private) API 的角度来看,LongAdder 扩展 Striped64 这一事实是无关紧要的。后一类是实现细节(即私有(private) API)。它是定义库契约的公共(public) API;因此,在这种情况下,用户只关心 LongAdderNumber 的子类。

如果需要,您可以配置 Javadoc 来记录所有内容,包括包私有(private)和 private 成员。但是,生成的文档可能只能供私有(private)使用(例如,供维护库的组织内部使用)。


1。使 API 公开或私有(private)的原因不仅仅基于可见性修饰符。该类位于哪个包中也是相关的。例如,JDK 中有许多包中的类,其前缀为com.sunoraclejdk.internal 等。这些包中的类是私有(private) API,因此未记录在公开可用的 Javadoc 中。

随着模块的出现,“私有(private)包”的概念在 Java 9 中获得了更多的正式地位。现在您可以显式声明模块导出哪些包,这是由运行时强制执行的。

关于java - LongAdder 扩展了哪个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56945073/

相关文章:

java - 反序列化嵌套 Json 数组

java - nanoTime() 在执行时间较长时显示的差异太小

c++ - 在 Base* 数据结构中格式化和使用派生类的正确方法是什么?

java - 如何使用 Java 泛型来避免覆盖继承的方法(类似模板的行为)?

c++ - 为什么在可怕的菱形情况下需要父类(super class)空构造函数但不调用?

java - 比较然后比较给出编译错误

java - 从 Android 手机中提取数据

java - 根据状态机模式实现的代码不起作用

java - 分组依据和映射值

java - java中的比较器链