45
/**
 * Gets the meatball icon for a nincompoop.
 * 
 * <p>
 * Example: {@code <custom:meatball color="<%= Meatball.RED %> nincompoop="${person}" />}
 * 
 * @author King Cong
 * 
 */

"${person}" 部分破坏了文档注释,因为它使用了花括号。

4

7 回答 7

28

与其说是一个解决方法,不如说是一个解决方法,但如果你{@code ...}用旧版本替换<code>...</code>它会按照你的期望呈现花括号。

<code>{person} == ${person}</code>

不幸的是,这会破坏尖括号,因此对于原始问题,您需要转义这些:

<code>&lt;custom:meatball color="&lt;%= Meatball.RED %&gt; nincompoop="${person}" /&gt;</code>

您甚至可以通过使用方便的 TextFX -> 转换 -> 编码 HTML (&<>") 让 Notepad++ 为您执行此操作来作弊。

这至少有一个好处,即在生成的 Javadoc 和 Eclipse 中的 Javadoc 视图中,一切都很好地呈现,这似乎并不理解&#125;和朋友。

于 2010-08-04T08:24:14.753 回答
24

尝试使用 HTML 转义:

$&#123;person&#125; == ${person}
于 2009-03-15T03:08:43.933 回答
9

bodunbodun 解决方案的工作原理通常是在 javadocs 中也有换行符。如果您同时需要 { 和换行符,则 HTML 转义将不起作用

<pre>
{@code
<foo bar="}${bar}{@code"/>
<bar foo="}${foo}{@code"/>
}
</pre>

会给你

<foo bar="${bar}" />
<bar foo="${foo}" />
于 2012-07-28T08:45:18.357 回答
3

实际上我遇到了同样的问题——没有一个命题对我有用(HTML 转义不管什么原因都不起作用)。如果这有帮助 - 尝试在有问题的符号之前关闭 {@code} 并在之后重新打开它,如下所示:

{@code nincompoop=" }${person}{@code " />}

这似乎不是解决方案,但它有效,并且如果仔细使用不会破坏格式:)

于 2011-03-08T17:48:05.777 回答
3

至少从 Java 1.8.0_31 开始,我无法再重现该问题。您的输入按预期呈现:

<code>&lt;custom:meatball color="&lt;%= Meatball.RED %&gt; nincompoop="${person}" /&gt;</code>

我的测试表明,javadoc考虑到内部的平衡花括号@code,并且仅在找到相应的花括号时才结束。

因此,如果代码像您的示例一样具有平衡的花括号{},它现在可以按预期工作。

但我仍然不知道如何处理不平衡的花括号,例如:

{@code printf"}<b>outside</b>"}

此外,行为取决于您使用的内联标签。man javadoc明确表示对于@link

If you need to use the right brace (}) inside the label, then use the HTML entity notation &#125;.

因此,在这种情况下,不可能做得更好。

不幸的是,我找不到@code支持我的实验的类似报价。

于 2015-03-06T10:37:44.787 回答
1

为此找到了另一个不太出色的解决方法。它比其他的更好还是更差?我让你决定。取出{@code }零件并将其替换为<code> </code>。(由于尖括号,这使它全部消失。)首先<将其包裹起来{@literal },使其看起来像这样{@literal<}。现在一切都会好起来的,而且在代码中并没有太可怕地被宰杀。最终结果如下所示

/**
 * Gets the meatball icon for a nincompoop.
 * 
 * <p>
 * Example: <code>{@literal<}custom:meatball color="<%= Meatball.RED %> nincompoop="${person}" /></code>
 * 
 * @author King Cong
 * 
 */

或者,如果您不喜欢{@literal<},则可以&lt;改用。结果将如下所示:

/**
 * Gets the meatball icon for a nincompoop.
 * 
 * <p>
 * Example: <code> &lt;custom:meatball color="<%= Meatball.RED %> nincompoop="${person}" /></code>
 * 
 * @author King Cong
 * 
 */

两者都不是很好的解决方案,但它们确实有效。

于 2015-08-12T04:38:37.620 回答
-1

使用{@literal},所以这样做{@literal } }。在我的测试中工作。

因此,对于您的情况,它看起来像这样:

/**
 * Gets the meatball icon for a nincompoop.
 * 
 * <p>
 * Example: {@code <custom:meatball color="<%= Meatball.RED %> nincompoop="${person{@literal } }" />}
 * 
 * @author King Cong
 * 
 */
于 2015-06-30T19:43:16.380 回答