首页 文章

Javadoc注释中的多行代码示例

提问于
浏览
480

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

14 回答

  • 3

    除了已经提到的 <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标记说明:Javadoc Tags

  • 0

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

    • 使用旧的 <code> - 标记以防止解释大括号

    • "new" {@code ...} 的使用 - 标记以获取输出中包含的泛型

    • @Override 中通过“ {@literal @}Override " because javadoc generator " tilts”转义@符号,因为@直接在一个开放的大括号之后

    • 删除 {@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();
    
  • 1

    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> 标记包含您的多行代码 .

  • 40

    您需要 <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;
    }
    }
    
  • 21
    /**
     * <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 with 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> 或周围会产生警告 .

  • 2

    我能够使用代码1中显示的以下剪辑生成外观漂亮的HTML文件 .

    * <pre>
     * {@code
     * A-->B
     *  \
     *   C-->D
     *    \   \
     *     G   E-->F
     * }
     *</pre>
    

    (代码1)

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

    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生成生成的javadoc HTML文件,如图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所示 .

  • 0

    <blockquote><pre>...<pre>{@code.... 之间存在显着差异 . 前者将省略泛型中的类型声明,但后者将保留它 .

    E.g.: List<MyClass> myObject = null; 显示为带有firts的 List myObject = null; 和带有第二个的 List<MyClass> myObject = null;

  • 9

    如果您是Android开发人员,则可以使用:

    <pre class=”prettyprint”>
    
    TODO:your code.
    
    </pre>
    

    使用Java代码在Javadoc中打印代码 .

  • 2

    这是我的两分钱 .

    由于其他答案已经陈述,您应该使用 <pre> </pre>{@code } 结合使用 .

    使用pre和{@code}

    • 将代码包装在 <pre></pre> 中可防止代码折叠到一行;

    • 将代码包装在 {@code } 中会阻止 <> ,其间的所有内容都会消失 . 当您的代码包含泛型或lambda表达式时,这尤其有用 .

    Problems with annotations

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

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

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

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

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

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

  • 1

    尝试用“pre”替换“code” . HTML中的pre标记将文本标记为预格式化,并且所有换行符和空格将与您键入时完全相同 .

  • 13

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

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

    我用 <pre class="brush: java"></pre> 标签附上我的示例代码,并使用SyntaxHighlighter发布javadocs . 它不会伤害IDE并使发布的代码示例美观 .

  • 683

    使用Java SE 1.6,看起来所有UPPERCASE 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>
     */
    

    这产生的输出看起来与常规代码完全相同,常规代码间距和新行完整无缺 .

相关问题