1. Обзор
Javadoc — это способ создания документации в формате HTML из исходного кода Java.
В этом руководстве мы сосредоточимся на тегах @version
и @since
в комментариях к документам.
2. Использование @version
и @since
В этом разделе мы поговорим о том, как правильно использовать теги @version
и @since
.
2.1. @версия
Формат тега @version
прост:
@version version-text
Например, мы можем использовать его для обозначения JDK 1.7:
/**
* @version JDK 1.7
*/
Когда мы используем тег @version
, у него есть два разных сценария использования:
- Запишите версию одного файла
- Отметьте версию всего программного обеспечения
Очевидно, мы видим, что между этими двумя сценариями существует несоответствие. Это связано с тем, что версия отдельного файла может быть несовместима с версией программного обеспечения. Кроме того, разные файлы могут иметь разные версии файлов. Итак, как мы должны использовать тег @version
?
В прошлом Sun использовала тег @version
для записи версии отдельного файла. Также было рекомендовано использовать в теге @version
строку SCCS « %I%, %G%
». Затем SCCS заменит « %I%
» на текущую версию файла, а « %G%
» на дату «мм/дд/гг» при извлечении файла. Например, это будет выглядеть как «1.39, 28/02/97» (мм/дд/гг). Кроме того, %I%
увеличивается каждый раз, когда мы редактируем
и удаляем
(дельта + получаем) файл.
SCCS также известна как система контроля исходного кода. Если мы хотим узнать больше о команде SCCS, мы можем обратиться к ней здесь . Кроме того, SCCS — это устаревшая система контроля версий исходного кода.
В настоящее время мы склонны использовать тег @version
для указания версии всего программного обеспечения. В свете этого он делает ненужным размещение тега @version
в одном файле.
Означает ли это, что версия отдельного файла больше не важна? На самом деле это не так. Теперь у нас есть модернизированное программное обеспечение для контроля версий, такое как Git, SVN, CVS и так далее. Каждое программное обеспечение для контроля версий имеет свой уникальный способ записи версии каждого отдельного файла, и ему не нужно полагаться на тег @version
.
Возьмем в качестве примера Oracle JDK 8. Если мы посмотрим на исходный код в файле src.zip
, мы обнаружим, что только класс java.awt.Color
имеет тег @version
:
/**
* @version 10 Feb 1997
*/
Таким образом, мы можем сделать вывод, что использование тега @version
для указания версии одного файла исчезает. Таким образом, документ Oracle предлагает использовать тег @version
для записи номера текущей версии программного обеспечения.
2.2. @поскольку
Формат тега @since
довольно прост:
@since since-text
Например, мы можем использовать его, чтобы отметить функцию, представленную в JDK 1.7:
/**
* @since JDK 1.7
*/
Короче говоря, мы используем тег @since
, чтобы описать, когда впервые появилось изменение или функция. Точно так же он использует версию выпуска всего программного обеспечения, а не версию отдельного файла. Документ Oracle дает нам несколько подробных инструкций по использованию тега @since
:
- При введении нового пакета мы должны указать тег
@since
в описании пакета и каждого его класса. - При добавлении нового класса или интерфейса мы должны указывать один тег
@since
в описании класса, а не в описании членов класса. - Если мы добавляем новых членов в существующий класс, мы должны указывать теги
@since
только для вновь добавленных членов, а не в описании класса. - Если мы изменим член класса с
защищенного
наобщедоступный
в более позднем выпуске, мы не должны изменять тег@since
.
Иногда тег @since
очень важен, потому что он дает важную подсказку о том, что пользователи программного обеспечения должны ожидать определенную функцию только после определенной версии выпуска.
Если мы еще раз взглянем на файл src.zip
, мы можем найти много случаев использования тега @since
. Возьмем в качестве примера класс java.lang.FunctionalInterface :
/**
* @since 1.8
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}
Из этого фрагмента кода мы можем узнать, что класс FunctionalInterface
доступен только в JDK 8 и выше.
3. Сходства между @version
и @since
В этом разделе мы рассмотрим сходство между тегами @version
и @since
.
3.1. Оба принадлежат блочным тегам
Во- первых, и @version
, и @since
относятся к блочным тегам.
В комментариях к документу теги можно разделить на два типа:
- Блокировать теги
- Встроенные теги
Тег блока имеет форму @tag
. И он должен появляться в начале строки, игнорируя начальные звездочки, пробелы и разделитель ( /**
). Например, мы можем использовать @version
и @since
в разделе тегов:
/**
* Some description here.
*
* @version 1.2
* @since 1.1
*/
Однако встроенный тег имеет вид {@tag}
. И он может существовать где угодно в описаниях или комментариях. Например, если у нас есть тег {@link}
, мы можем использовать его в описании:
/**
* We can use a {@link java.lang.StringBuilder} class here.
*/
3.2. Оба могут быть использованы несколько раз
Во- вторых, и @version
, и @since
можно использовать несколько раз. Сначала мы можем быть шокированы этим использованием. Затем мы можем задаться вопросом, как тег @version
может появляться несколько раз в одном классе. Но это правда, и это задокументировано здесь . И это объясняет, что мы можем использовать один и тот же программный элемент более чем в одном API. Таким образом, мы можем прикрепить различные версии с одним и тем же программным элементом.
Например, если мы используем один и тот же класс или интерфейс в разных версиях ADK и JDK, мы можем предоставить разные сообщения @version
и @since
:
/**
* Some description here.
*
* @version ADK 1.6
* @version JDK 1.7
* @since ADK 1.3
* @since JDK 1.4
*/
В сгенерированных HTML-страницах инструмент Javadoc будет вставлять запятую (,) и пробел между именами. Таким образом, текст версии выглядит так:
ADK 1.6, JDK 1.7
И, поскольку текст выглядит так:
ADK 1.3, JDK 1.4
4. Различия между @version
и @since
В этом разделе рассмотрим различия между тегами @version
и @since
.
4.1. Изменится ли их содержание
Текст @version
постоянно меняется, а текст @since
стабилен. Со временем программное обеспечение постоянно совершенствуется. Будут присоединяться новые функции, поэтому его версия будет продолжать меняться. Однако тег @since
указывает только момент времени в прошлом, когда появились новые изменения или функции.
4.2. Где их можно использовать
Эти два тега имеют немного различное использование:
@version
: обзор, пакет, класс, интерфейс@since
: обзор, пакет, класс, интерфейс, поле, конструктор, метод
Тег @since
имеет более широкое применение и допустим в любом комментарии к документу . Напротив, тег @version
имеет более узкий диапазон использования, и мы не можем использовать его в полях, конструкторах или методах.
4.3. Появляются ли они по умолчанию
Эти два тега по умолчанию имеют разное поведение на сгенерированных HTML-страницах:
- Текст
@version
не отображается по умолчанию - Текст
@since
появляется по умолчанию
Если мы хотим включить «текст версии» в сгенерированные документы, мы можем использовать опцию -version
:
javadoc -version -d docs/ src/*.java
Точно так же, если мы хотим опустить «с текстом» в сгенерированных документах, мы можем использовать параметр -nosince
:
javadoc -nosince -d docs/ src/*.java
5. Вывод
В этом уроке мы впервые рассказали о том, как правильно использовать теги @version
и @since
. Затем мы описали сходства и различия между ними. Короче говоря, тег @version
содержит номер текущей версии программного обеспечения, а тег @since
описывает, когда впервые появилось изменение или функция.