Пример многострочного кода в комментарии Javadoc - PullRequest
502 голосов
/ 12 февраля 2009

У меня есть небольшой пример кода, который я хочу включить в комментарий Javadoc для метода.

/**
 * -- ex: looping through List of Map objects --
 * <code>
 * for (int i = 0; i < list.size(); i++) {
 *      Map map = (Map)list.get(i);
 *      System.out.println(map.get("wordID"));
 *      System.out.println(map.get("word"));
 * }
 * </code>
 * 
 * @param query - select statement
 * @return List of Map objects
 */

Проблема в том, что пример кода отображается в Javadoc без разрывов строк, что затрудняет его чтение.

-- ex: looping through List of Map objects -- for (int i = 0; i list.size(); i++) { Map map = (Map)list.get(i); System.out.println(map.get("wordID")); System.out.println(map.get("word")); } 
Parameters
query - - select statement 
Returns:
List of Map objects 

Полагаю, я ошибаюсь, предполагая, что тег кода будет обрабатывать разрывы строк. Как лучше всего форматировать примеры кода в комментариях Javadoc?

Ответы [ 14 ]

712 голосов
/ 12 февраля 2009

В дополнение к уже упомянутым тегам <pre> вы также должны использовать аннотацию @code JavaDoc, которая значительно облегчит жизнь, когда речь идет о проблемах с сущностями HTML (в частности, с Generics), например:

<code>* <pre>
* {@code
* Set<String> s;
* System.out.println(s);
* }
* 

Даст правильный вывод HTML:

Set<String> s;
System.out.println(s);

При пропуске блока @code (или использовании тега <code>) HTML будет выглядеть следующим образом:

Set s;
System.out.println(s);

(Для справки, описания тегов Java SE 8 можно найти здесь: Теги Javadoc )

155 голосов
/ 22 ноября 2012

Мне было очень тяжело с включением конкретного примера кода в комментарий Javadoc. Я хотел бы поделиться этим.
Обратите внимание на следующее:

  • использование старого <code> - тега для предотвращения интерпретации фигурных скобок
  • использование тега "new" {@code ...} для получения обобщенных элементов, включенных в вывод
  • экранирование знака @ в @Override через "{@literal @}Override", поскольку генератор javadoc "наклоняется" туда из-за того, что @ идет непосредственно после открывающей фигурной скобки
  • удалить один пробел перед {@code и {@literal, чтобы компенсировать внутренние пробелы и сохранить выравнивание

код Javadoc:

<code>/** this methods adds a specific translator from one type to another type. `
  * i.e.
  * <pre>
  * <code>new BeanTranslator.Builder()
  *   .translate(
  *     new{@code Translator<String, Integer>}(String.class, Integer.class){
  *      {@literal @}Override
  *       public Integer translate(String instance) {
  *         return Integer.valueOf(instance);
  *       }})
  *   .build();
  * </code>
  * 
* переводчик @param * /

печатается как

new BeanTranslator.Builder()
  .translate(
    new Translator<String, Integer>(String.class, Integer.class){
      @Override
      public Integer translate(String instance) {
        return Integer.valueOf(instance);
      }})
  .build();
40 голосов
/ 12 февраля 2009

В java-источнике есть много хороших примеров для этого. Вот пример из главы "String.java":

<code>....
 * is equivalent to:
 * <p><blockquote><pre>
 *     char data[] = {'a', 'b', 'c'};
 *     String str = new String(data);
 * 

* Вот еще несколько примеров того, как можно использовать строки: *

 *     System.out.println("abc");
 *     String cde = "cde";
 *     System.out.println("abc" + cde);
 *     String c = "abc".substring(2,3);
 *     String d = cde.substring(1, 2);
 * 
...
22 голосов
/ 12 февраля 2009

Добавьте ваш многострочный код с тегами .

14 голосов
/ 04 августа 2011

Вам нужны теги для разрывов строк и {@code ... } внутри них для обобщений. Но тогда нельзя размещать открывающую скобку на той же строке, что и тег <generic>, потому что тогда все снова будет отображаться на 1 строке.

Отображение в одной строке:

<code>* ..
* <pre>
* {@code
* public List<Object> getObjects() {
*    return objects;
* }
* 
* ..

Отображение с переносами строк:

<code>* ..
* <pre>
* {@code
* public List<Object> getObjects() 
* {
*    return objects;
* }
* 
* ..

Еще одна странная вещь - когда вы вставляете закрывающую фигурную скобку {@code, отображается:

<code>* ..
* <pre>
* {@code
*   public List<Object> getObjects() 
*   {
*     return objects;
*   }
* }
* 
* ..

Выход:

public List<Object> getObjects() 
{
   return objects;
}
}
9 голосов
/ 05 марта 2014
/**
 * 
 * {@code
 * public Foo(final Class<?> klass) {
 *     super();
 *     this.klass = klass;
 * }
 * }
 * 
** /
  • <pre/> требуется для сохранения строк.
  • {@code должен иметь собственную строку
  • <blockquote/> только для отступа.
public Foo(final Class<?> klass) {
    super();
    this.klass = klass;
}

<ч /> ОБНОВЛЕНИЕ с JDK8

Минимальные требования для правильных кодов: <pre/> и {@code}.

<code>/**
 * test.
 *
 * <pre>{@code
 * <T> void test(Class<? super T> type) {
 *     System.out.printf("hello, world\n");
 * }
 * }
* /

выходы

 <T> void test(Class<? super T> type) {
     System.out.printf("hello, world\n");
 }

И дополнительное окружение <blockquote/> вставляет отступ.

<code>/**
 * test.
 *
 * <blockquote><pre>{@code
 * <T> void test(Class<? super T> type) {
 *     System.out.printf("hello, world\n");
 * }
 * }
* /

выходы

     <T> void test(Class<? super T> type) {
         System.out.printf("hello, world\n");
     }

Вставка <p> или окружение с <p> и </p> выдает предупреждения.

4 голосов
/ 21 февраля 2013

Мне удалось создать красивый HTML-файл с помощью следующего фрагмента кода, показанного в коде 1.

<code> * <pre>
 * {@code
 * A-->B
 *  \
 *   C-->D
 *    \   \
 *     G   E-->F
 * }
 *

(код 1)

Код 1 превратился в сгенерированную HTML-страницу Javadoc на рис. 1, как и ожидалось.

A-->B
 \
  C-->D
   \   \
    G   E-->F

(рис. 1)

Однако в NetBeans 7.2, если вы нажмете Alt + Shift + F (чтобы переформатировать текущий файл), Код 1 превратится в Код 2.

<code> * <
 * pre>
 * {@code
 * A-->B
 *  \
 *   C-->D
 *    \   \
 *     G   E-->F
 * }
 * 

(код 2)

, где первый <pre> теперь разбит на две строки. Код 2 создает сгенерированный файл Javadoc HTML, как показано на рисунке 2.

< pre> A-->B \ C-->D \ \ G E-->F

(рис. 2)

Предложение Стива В (Код 3), похоже, дает наилучшие результаты и остается отформатированным, как и ожидалось, даже после нажатия Alt + Shift + F.

<code>*<p><blockquote><pre>         
* A-->B
*  \
*   C-->D
*    \   \
*     G   E-->F
* 

(код 3)

Использование кода 3 приводит к тому же выводу javadoc HTML, как показано на рисунке 1.

3 голосов
/ 24 августа 2018

Вот мои два цента.

Поскольку другие ответы уже заявили, вы должны использовать <pre> </pre> в сочетании с {@code }.

Используйте pre и {@code}

  • Заключение кода в <pre> и </pre> предотвращает свертывание кода в одну строку;
  • Заключение вашего кода в {@code } предотвращает исчезновение <, > и всего, что находится между ними. Это особенно полезно, когда ваш код содержит обобщенные или лямбда-выражения.

Проблемы с аннотациями

Проблемы могут возникнуть, когда ваш блок кода содержит аннотацию. Вероятно, это связано с тем, что когда знак @ появляется в начале строки Javadoc, он считается тегом Javadoc, например @param или @return. Например, этот код может быть проанализирован неправильно:

/**
 * Example usage:
 *
 * <pre>{@code
 * @Override
 * public void someOverriddenMethod() {

Вышеупомянутый код полностью исчезнет в моем случае.

Чтобы исправить это, строка не должна начинаться со знака @:

<code>/**
 * Example usage:
 *
 * <pre>{@code  @Override
 * public int someMethod() {
 *     return 13 + 37;
 * }
 * }
* /

Обратите внимание, что между @code и @Override есть два пробела, чтобы выровнять положение со следующими строками. В моем случае (с использованием Apache Netbeans) он отображается правильно.

3 голосов
/ 19 июля 2012

Существует существенная разница между <blockquote><pre>... и <pre>{@code..... Первый из них пропустит объявления типов в шаблонах, но последний сохранит его.

E.g.: List<MyClass> myObject = null; отображается как List myObject = null; с первым и как List<MyClass> myObject = null; со вторым

2 голосов
/ 29 августа 2015

Если вы разработчик Android, вы можете использовать:

<code><pre class=”prettyprint”>

TODO:your code.

Чтобы красиво напечатать свой код в Javadoc с кодом Java.

...