我有一个小代码示例,我想在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>
<code>
 ... java code, even including annotations
</code>
</pre>

and

<pre class="code">
 ... java code, even including annotations
</pre>

当然,后者更简单,请注意class="code"部分

其他回答

另外两种解决方案的结合似乎是完美的:

* <pre>{@code
*     {@literal @}Override
*     public void someMethod() {
*         Set<String> s;
*     }
* }</pre>

ie。使用<pre>{@code开始和}</pre>结束片段。同样,用{@literal @}替换@。

还没有找到更简单的解决办法。对于一门已经活跃开发了几十年的语言来说,这是相当可悲的。

我使用这两种方法没有任何问题:

<pre>
<code>
 ... java code, even including annotations
</code>
</pre>

and

<pre class="code">
 ... java code, even including annotations
</pre>

当然,后者更简单,请注意class="code"部分

至少在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.
 ``` */

在javadoc注释中包含特定的代码示例时,我遇到了很大的困难。我想分享这个。 请注意以下事项:

使用旧的<code> -标签来防止花括号被解释 new {@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();

使用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>
 */

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