Пример нескольких строк кода в комментарии 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 ...