Подтвердить что ты не робот

Как избежать фигурных скобок в ярлыках javadoc, таких как тег {@code}

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

Часть "$ {person}" прерывает комментарий doc, поскольку использует фигурные скобки.

4b9b3361

Ответ 1

Попробуйте использовать HTML-экраны:

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

Ответ 2

Не так много ответа, как обходной путь, но если вы замените {@code ...} на старую версию <code>...</code>, она будет отображать фигурные скобки, как вы ожидаете.

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

К сожалению, это разрывает угловые скобки, поэтому к исходному вопросу вам нужно избавиться от них:

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

Вы можете даже обмануть здесь, получив Notepad ++ для этого, с удобным TextFX → convert → Encode HTML (& < > ").

Это, по крайней мере, имеет то преимущество, что все отлично выглядит как в сгенерированном Javadoc, так и в Eclipse в представлении Javadoc, который, как представляется, не понимает &#125; и друзей.

Ответ 3

Решение bodunbodun работает так, как обычно бывает, что в javadocs есть новая строка. HTML-экраны не будут работать, если вы хотите как {и новую строку

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

предоставит вам

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

Ответ 4

У меня была такая же проблема на самом деле - ни одно из предложений не работало для меня (HTML-экраны не работают по какой-либо причине). Если это помогает - попробуйте закрыть {@code} перед проблемным символом и снова открыть его, например:

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

Это не похоже на решение, но оно работает и не прерывает форматирование, если использовать его тщательно:)

Ответ 5

Как минимум, на 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, которая поддерживает мои эксперименты.

Ответ 6

Используйте {@literal}, так что сделайте это {@literal } }. Работает в моих тестах.

Итак, для вашего случая это будет выглядеть так:

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

Ответ 7

Найден еще меньше, чем звездное обходное решение для этого. Это лучше или хуже других? Я позволю тебе решить. Возьмите часть {@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
 * 
 */

Не являются отличными решениями, но они действительно работают.