我有一个小代码示例,我想在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注释中格式化代码示例的最佳方法是什么?


当前回答

我刚刚在这里阅读了Javadoc 1.5参考,只有<和>的代码必须包含在{@code…}中。这里有一个简单的例子:

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

其他回答

除了前面提到的<pre>标记之外,你还应该使用@code JavaDoc注释,这将使HTML实体问题(特别是泛型)变得更容易,例如:

* <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中可用的标记描述的完整列表。

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>
...

使用Java SE 1.6,看起来所有大写的PRE标识符都是在Javadoc中做到这一点的最佳方式:

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

是最简单的方法。

我从java.awt.Event方法中得到了一个javadoc的例子:

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

这将产生与常规代码完全相同的输出,常规代码间距和新行不变。

<blockquote><pre>…以前和< > {@code……前者将省略泛型中的类型声明,而后者将保留它。

例如: List<MyClass> myObject = null; List myObject = null;List<MyClass> myObject = null;第二种情况

/**
 * <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;
}

用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>包围会产生警告。