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


当前回答

这是我的意见。

正如其他答案已经说明的那样,您应该将<pre> </pre>与{@code}结合使用。

使用pre和{@code}

包装你的代码在<pre>和</pre>防止你的代码崩溃到一行; 将代码包装在{@code}中可以防止<、>和中间的所有内容消失。当代码包含泛型或lambda表达式时,这尤其有用。

注释的问题

当代码块包含注释时,就会出现问题。这可能是因为当@符号出现在Javadoc行的开头时,它被认为是一个类似于@param或@return的Javadoc标记。例如,这段代码可能被错误地解析:

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

以上代码将完全消失在我的情况下。

要解决这个问题,行不能以@符号开头:

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

注意,@code和@Override之间有两个空格,以保持内容与下一行对齐。在我的例子中(使用Apache Netbeans),它被正确呈现。

其他回答

如果你是Android开发者,你可以使用:

<pre class=”prettyprint”>

TODO:your code.

</pre>

用Java代码在Javadoc中漂亮地打印代码。

用<pre></pre>标签将多行代码括起来。

除了前面提到的<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 18 (JEP 413)开始,您可以使用@snippet标记:

/**
 * -- ex: looping through List of Map objects --
 * {@snippet :
 * 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"));
 * }
 * }
 *
 * @param query - select statement
 * @return List of Map objects
 */

至少在Visual Studio Code中,你可以通过将Javadoc注释包装成三反引号来强制它遵守换行符,如下所示:

/** ```markdown
 * This content is rendered in (partial) markdown.
 * 
 * For example, *italic* and **bold** text works, but [links](https://www.google.com) do not.
 * Bonus: it keeps single line-breaks, as seen between this line and the previous.
 ``` */