Javadoc注释中的多行代码示例

Mar*_*ark 516 html java 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
 */
Run Code Online (Sandbox Code Playgroud)

问题是代码示例显示在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 
Run Code Online (Sandbox Code Playgroud)

我想我错误地认为代码标记会处理换行符.在Javadoc注释中格式化代码示例的最佳方法是什么?

Fab*_*eeg 728

除了已经提到的<pre>标签之外,您还应该使用@codeJavaDoc注释,这将使HTML实体问题(特别是泛型)的生活变得更加容易,例如:

* <pre>
* {@code
* Set<String> s;
* System.out.println(s);
* }
* </pre>
Run Code Online (Sandbox Code Playgroud)

将提供正确的HTML输出:

Set<String> s;
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)

省略@code块(或使用<code>标记)将导致HTML如下:

Set s;
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)

(有关参考,可以在此处找到Java SE 8标记描述:Javadoc标记)

  • 我也会这么想,但不幸的是,它仍然需要添加<pre>标签以获得换行符. (62认同)
  • 另一个不幸的是,如果你的示例代码中有块使用花括号"{}",第一个右括号将终止@code块.解决这个问题的一种方法是使用(等待它......)html实体作为大括号.我没有看到带有块的代码的<pre>标签的令人信服的论据. (30认同)
  • 不幸的是,当你点击ctrl + shift + F(Eclipse中的格式代码)时,Eclipse会弄乱{@code}标签并用{&#064;代码替换它... (12认同)
  • {@code}将为您做,<pre />,IIRC. (6认同)
  • @jpdaigle我刚刚在Eclipse Galileo和Helios中尝试了这个,格式化程序并没有替换任何东西(在Mac OS上,但我从未见过格式化程序在其他平台上做过类似的事情). (2认同)
  • _Eclipse混淆了{@code}标签,并用{&#064;代码 - _代替它.这不是因为Eclipse,这是因为(bugged?)javadoc实用程序.如果{@code ... multiline ...}中的多行代码中有@字符,那么javadoc无法正确解析它:(至少这是我在Oracle JDK1.7.0_45 javadoc实现中看到的. (2认同)
  • @符号也不能很好地发挥作用. (2认同)
  • 我在使用`@code}`标签包装的代码中使用`@`符号也遇到了问题.没有`{@code}`我至少可以用`{@literal @}`来逃避它们 (2认同)
  • 最后,我仍然使用`&lt;pre&gt; &lt;code&gt; {...} &lt;/ code&gt; &lt;/ pre&gt;`,因为我不想使用`{}`来转义块。{@code ...}`吞噬了一切。 (2认同)

小智 162

我在javadoc评论中包含一个特定的代码示例时非常艰难.我想分享这个.
请注意以下事项:

  • 使用old <code>- tag来防止大括号被解释
  • 使用"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
  */
Run Code Online (Sandbox Code Playgroud)

打印为

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

  • 这是一个有效的,接受的答案在我的日食中不能很好地运作(4.6.2). (3认同)
  • 这有效,但是在运行javadoc输出此警告"warning:{@code} <code>"时,我收到警告 (2认同)

Ste*_* B. 41

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>
...
Run Code Online (Sandbox Code Playgroud)

  • In summary, `<pre><blockquote>...</blockquote></pre>` (9认同)
  • 而是`<p> <blockquote> <pre>``</ pre> </ blockquote> </ p> (6认同)

Zac*_*ena 24

<pre></pre>标签封闭多行代码.


Rul*_*ule 14

你需要<pre></pre>换行符的标签,以及{@code ... }用于泛型的内部标签.但是,不允许将开口支架放在与<generic>标签相同的线上,因为这样一切都将再次显示在1行上.

显示在一行:

* ..
* <pre>
* {@code
* public List<Object> getObjects() {
*    return objects;
* }
* </pre>
* ..
Run Code Online (Sandbox Code Playgroud)

显示换行符:

* ..
* <pre>
* {@code
* public List<Object> getObjects() 
* {
*    return objects;
* }
* </pre>
* ..
Run Code Online (Sandbox Code Playgroud)

另一个奇怪的事情是当你粘贴右括号时{@code,会显示:

* ..
* <pre>
* {@code
*   public List<Object> getObjects() 
*   {
*     return objects;
*   }
* }
* </pre>
* ..
Run Code Online (Sandbox Code Playgroud)

输出:

public List<Object> getObjects() 
{
   return objects;
}
}
Run Code Online (Sandbox Code Playgroud)

  • 欢迎使用Stack Overflow.要格式化帖子中的代码,您可以将它(在单独的段落上)加前四个空格,或者用反引号(```````)将它们包围起来.你不需要`<code>`和`<pre>`标签.我在这个脑海中编辑了你的答案. (4认同)

Jin*_*won 10

/**
 * <blockquote><pre>
 * {@code
 * public Foo(final Class<?> klass) {
 *     super();
 *     this.klass = klass;
 * }
 * }
 * </pre></blockquote>
 **/
Run Code Online (Sandbox Code Playgroud)
  • <pre/> 是保留线路所必需的.
  • {@code 必须有自己的路线
  • <blockquote/> 只是为了缩进.
public Foo(final Class<?> klass) {
    super();
    this.klass = klass;
}
Run Code Online (Sandbox Code Playgroud)


使用JDK8进行更新

正确代码的最低要求是<pre/>{@code}.

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

产量

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

并且可选的周边<blockquote/>插入缩进.

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

产量

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

插入<p>或包围<p></p>产生警告.


Nol*_*uen 10

从 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
 */
Run Code Online (Sandbox Code Playgroud)


bit*_*rme 5

我能够使用代码 1 中显示的以下 snip-it 生成漂亮的 HTML 文件。

 * <pre>
 * {@code
 * A-->B
 *  \
 *   C-->D
 *    \   \
 *     G   E-->F
 * }
 *</pre>
Run Code Online (Sandbox Code Playgroud)

(代码 1)

正如预期的那样,代码 1 变成了图 1 中生成的 javadoc HTML 页面。

A-->B
 \
  C-->D
   \   \
    G   E-->F
Run Code Online (Sandbox Code Playgroud)

(图。1)

但是,在 NetBeans 7.2 中,如果您按 Alt+Shift+F(重新格式化当前文件),则代码 1 会变成代码 2。

 * <
 * pre>
 * {@code
 * A-->B
 *  \
 *   C-->D
 *    \   \
 *     G   E-->F
 * }
 * </pre>
Run Code Online (Sandbox Code Playgroud)

(代码 2)

第一个<pre>现在被分成两行。代码 2 生成生成的 javadoc HTML 文件,如图 2 所示。

< pre> A-->B \ C-->D \ \ G E-->F
Run Code Online (Sandbox Code Playgroud)

(图2)

Steve B 的建议(代码 3)似乎给出了最好的结果,并且即使在按下 Alt+Shift+F 后仍保持按预期格式化。

*<p><blockquote><pre>         
* A-->B
*  \
*   C-->D
*    \   \
*     G   E-->F
* </pre></blockquote>
Run Code Online (Sandbox Code Playgroud)

(代码 3)

使用代码 3 产生与图 1 相同的 javadoc HTML 输出。


MC *_*ror 5

这是我的两分钱。

正如其他答案已经指出的那样,您应该<pre> </pre>{@code }.

使用pre{@code}

  • 将您的代码包装在里面<pre></pre>防止您的代码折叠成一行;
  • 将您的代码包装在里面{@code }可以防止<>以及介于两者之间的所有内容消失。当您的代码包含泛型或 lambda 表达式时,这尤其有用。

注释问题

当您的代码块包含注释时可能会出现问题。这可能是因为当该@符号出现在 Javadoc 行的开头时,它被视为一个 Javadoc 标记,如@param@return。例如,此代码可能会被错误解析:

/**
 * Example usage:
 *
 * <pre>{@code
 * @Override
 * public void someOverriddenMethod() {
Run Code Online (Sandbox Code Playgroud)

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

要解决此问题,该行不得以@符号开头:

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

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