Пример нескольких строк кода в комментарии Javadoc

У меня есть небольшой пример кода, который я хочу включить в комментарий 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?

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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

код javadoc:

/** 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>
  * </pre>
  * @param translator
  */

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

new BeanTranslator.Builder()
  .translate(
    new Translator<String, Integer>(String.class, Integer.class){
      @Override
      public Integer translate(String instance) {
        return Integer.valueOf(instance);
      }})
  .build();

Ответ 3

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

....
 * is equivalent to:
 * <p><blockquote><pre>
 *     char data[] = {'a', 'b', 'c'};
 *     String str = new String(data);
 * </pre></blockquote><p>
 * Here are some more examples of how strings can be used:
 * <p><blockquote><pre>
 *     System.out.println("abc");
 *     String cde = "cde";
 *     System.out.println("abc" + cde);
 *     String c = "abc".substring(2,3);
 *     String d = cde.substring(1, 2);
 * </pre></blockquote>
...

Ответ 4

Включите многострочный код с тегами <pre></pre>.

Ответ 5

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

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

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

Отображается с разрывами строк:

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

Еще одна странность в том, что при вставке закрывающей скобки {@code она отображается:

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

Вывод:

public List<Object> getObjects() 
{
   return objects;
}
}

Ответ 6

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

<ч/" > UPDATE с JDK8

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

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

дает

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

И необязательный окружающий <blockquote/> вставляет отступ.

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

дает

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

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

Ответ 7

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

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

(код 1)

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

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

(рис .1)

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

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

(код 2)

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

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

(рис. 2)

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

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

(код 3)

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

Ответ 8

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

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

Ответ 9

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

<pre class="prettyprint">

TODO:your code.

</pre>

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

Ответ 10

Попробуйте заменить "код" на "pre". Предварительный тег в HTML отмечает текст как предварительно отформатированный, и все строки и пробелы будут отображаться точно так же, как вы их набираете.

Ответ 11

Я прилагаю код примера с тегами <pre class="brush: java"></pre> и использую SyntaxHighlighter для опубликованных javadocs. Это не мешает IDE и делает опубликованные примеры кода красивыми.

Ответ 12

Используя Java SE 1.6, похоже, что все идентификаторы UPPERCASE PRE - лучший способ сделать это в Javadoc:

/**
 * <PRE>
 * insert code as you would anywhere else
 * </PRE>
 */

- самый простой способ сделать это.

Пример из javadoc, который я получил из метода java.awt.Event:

/**
 * <PRE>
 *    int onmask = SHIFT_DOWN_MASK | BUTTON1_DOWN_MASK;
 *    int offmask = CTRL_DOWN_MASK;
 *    if ((event.getModifiersEx() & (onmask | offmask)) == onmask) {
 *        ...
 *    }
 * </PRE>
 */

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

Ответ 13

Я просто прочитал ссылку Javadoc 1.5 здесь, и только код с < и > должен быть заключен внутри {@code ...}. Вот простой пример:

 /** 
 * Bla bla bla, for example:
 *
 * <pre>
 * void X() {
 *    List{@code <String>} a = ...;
 *    ...
 * }
 * </pre>
 *
 * @param ...
 * @return ...
 */
 .... your code then goes here ...