如何在javadoc内联标记中转义花括号,例如{@code}标记

时间:2009-03-15 03:06:25

标签: java javadoc escaping curly-braces

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

“$ {person}”部分会破坏文档评论,因为它使用花括号。

7 个答案:

答案 0 :(得分:22)

作为一种解决方法,答案并非如此,但如果您使用旧版本{@code ...}替换<code>...</code>,它将以您期望的方式呈现大括号。

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

不幸的是,这会破坏尖括号,所以对于原始问题,你需要逃避这些:

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

你甚至可以通过让Notepad ++为你做到这一点来欺骗,方便的TextFX - &gt;转换 - &gt;编码HTML(&amp;&lt;&gt;“)。

这至少可以带来好处,一切都可以在生成的Javadoc和Javadoc视图中的Eclipse中很好地呈现,而Javadoc视图似乎无法理解&#125;和朋友。

答案 1 :(得分:18)

尝试使用HTML转义:

$&#123;person&#125; == ${person}

答案 2 :(得分:8)

bodunbodun解决方案的工作原理通常是你在javadocs中也有换行符。如果你想要{和换行符

,HTML转义将不起作用
<pre>
{@code
<foo bar="}${bar}{@code"/>
<bar foo="}${foo}{@code"/>
}
</pre>

会给你

<foo bar="${bar}" />
<bar foo="${foo}" />

答案 3 :(得分:3)

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

{@ code nincompoop =“} $ {person} {@ code ”/&gt;}

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

答案 4 :(得分:2)

至少从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类似的引用。

答案 5 :(得分:0)

为此找到另一个不太好的解决方法。它比其他更好还是更差?我让你决定。取<div id="about"> <div id="myPicture"> <p>&nbsp;</p> <p> <img src="images/profile2.jpg" /> </p> </div> <div id="myName"> <p>Dude</p> </div> </div>部分并将其替换为{@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;

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

答案 6 :(得分:-1)

使用{@literal},请执行此操作{@literal } }。适用于我的测试。

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

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