Какой класс расширяет LongAdder?
Как показано в источнике, он расширяется Striped64
.Так как этот класс не является публичным API, Javadoc не сообщает вам этого.
Javadoc по умолчанию генерирует документацию только для public
и protected
членов;другими словами, только публичный API задокументирован 1 .Класс Striped64
является закрытым для пакета и поэтому не документирован.Поскольку класс не задокументирован, найден следующий ближайший задокументированный предок, который в данном случае равен Number
.Обратите внимание, что у вас может быть документированный класс Foo
, имеющий 15+ предков, но если ни один из этих предков не является публичным API, Javadoc покажет Foo extends Object
.
С точки зрения открытого API по сравнению с частным API,факт LongAdder
распространяется Striped64
не имеет значения.Последний класс представляет собой подробность реализации (т.е. частный API).Это публичный API, который определяет контракты библиотеки;следовательно, пользователь заботится только о том, чтобы LongAdder
был подклассом Number
в этом случае.
Вы можете сконфигурировать Javadoc для документирования всего, включая закрытый пакет и private
членов, если это необходимо.Однако сгенерированная документация, вероятно, должна быть предназначена только для частного использования (например, для организации, обслуживающей библиотеку).
1.То, что делает API общедоступным или приватным, основано не только на модификаторе видимости.В какой упаковке находится класс, также важно.Например, JDK имеет много классов в пакетах с префиксами, такими как com.sun
, oracle
, jdk.internal
и так далее.Классы в этих пакетах являются частным API и поэтому не документированы в общедоступном Javadoc.
Идея «частных пакетов» получила более официальный статус в Java 9 с появлением модулей,Теперь вы можете явно объявить, какие пакеты экспортируются модулем, и это принудительно выполняется во время выполнения.