我想在一个方法的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注释中格式化代码示例的最佳方法是什么?
答案 0 :(得分:706)
除了已经提到的<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)
答案 1 :(得分:155)
我在javadoc评论中包含一个特定的代码示例时非常艰难。我想分享一下。
请注意以下事项:
<code>
- 标记以防止解释大括号{@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();
答案 2 :(得分:40)
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>
...
答案 3 :(得分:23)
使用<pre></pre>
标记附上您的多行代码。
答案 4 :(得分:14)
您需要换行符的<pre></pre>
标记,以及其中的{@code ... }
作为泛型。但是不允许将左大括号放在与<generic>
标签相同的行上,因为这样一切都将再次显示在一行上。
在一行显示:
* ..
* <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;
}
}
答案 5 :(得分:9)
/**
* <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>
或周围会产生警告。
答案 6 :(得分:4)
我能够使用以下代码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所示。
答案 7 :(得分:3)
这是我的两分钱。
其他答案已经说明,您应该结合使用 <pre>
</pre>
和 {@code
}
pre
和{@code}
<pre>
和</pre>
内可防止您的代码折叠到一行上; {@code
}
内可防止<
,>
以及两者之间的所有内容消失。当您的代码包含泛型或lambda表达式时,此功能特别有用。注释问题
当您的代码块包含注释时,可能会出现问题。这可能是因为当@
符号出现在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),它可以正确呈现。
答案 8 :(得分:3)
<blockquote><pre>...
和<pre>{@code....
之间存在显着差异前者将省略泛型中的类型声明,但后者将保留它。
E.g.:
List<MyClass> myObject = null;
显示为List myObject = null;
显示为List<MyClass> myObject = null;
,显示为{{1}}显示第二
答案 9 :(得分:2)
如果您是Android开发人员,可以使用:
<pre class=”prettyprint”>
TODO:your code.
</pre>
使用Java代码在Javadoc中打印代码。
答案 10 :(得分:1)
其他两种解决方案的组合似乎是完美的:
* <pre>{@code
* {@literal @}Override
* public void someMethod() {
* Set<String> s;
* }
* }</pre>
即。使用 <pre>{@code
开始和 }</pre>
结束代码段。此外,将 @
替换为 {@literal @}
。
还没有找到更简单的解决方案。对于一种几十年来一直在积极发展的语言来说,这很令人难过。
答案 11 :(得分:1)
我刚刚阅读了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 ...
答案 12 :(得分:1)
尝试用“pre”替换“code”。 HTML中的pre标记将文本标记为预格式化,并且所有换行符和空格都将与您键入时完全相同。
答案 13 :(得分:0)
使用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>
*/
这会产生与常规代码完全相同的输出,常规代码间距和新行保持不变。
答案 14 :(得分:0)
我将示例代码附加<pre class="brush: java"></pre>
标记,并使用SyntaxHighlighter发布javadoc。它不会损害IDE并使发布的代码示例更美观。
答案 15 :(得分:0)
至少在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.
``` */
答案 16 :(得分:0)
我通过两种方式工作,没有任何问题:
<pre>
<code>
... java code, even including annotations
</code>
</pre>
和
<pre class="code">
... java code, even including annotations
</pre>
当然后者更简单,请注意class="code"
部分