Ответ 1
Попробуйте использовать HTML-экраны:
${person} == ${person}
/**
* Gets the meatball icon for a nincompoop.
*
* <p>
* Example: {@code <custom:meatball color="<%= Meatball.RED %> nincompoop="${person}" />}
*
* @author King Cong
*
*/
Часть "$ {person}" прерывает комментарий doc, поскольку использует фигурные скобки.
Попробуйте использовать HTML-экраны:
${person} == ${person}
Не так много ответа, как обходной путь, но если вы замените {@code ...}
на старую версию <code>...</code>
, она будет отображать фигурные скобки, как вы ожидаете.
<code>{person} == ${person}</code>
К сожалению, это разрывает угловые скобки, поэтому к исходному вопросу вам нужно избавиться от них:
<code><custom:meatball color="<%= Meatball.RED %> nincompoop="${person}" /></code>
Вы можете даже обмануть здесь, получив Notepad ++ для этого, с удобным TextFX → convert → Encode HTML (& < > ").
Это, по крайней мере, имеет то преимущество, что все отлично выглядит как в сгенерированном Javadoc, так и в Eclipse в представлении Javadoc, который, как представляется, не понимает }
и друзей.
Решение bodunbodun работает так, как обычно бывает, что в javadocs есть новая строка. HTML-экраны не будут работать, если вы хотите как {и новую строку
<pre>
{@code
<foo bar="}${bar}{@code"/>
<bar foo="}${foo}{@code"/>
}
</pre>
предоставит вам
<foo bar="${bar}" />
<bar foo="${foo}" />
У меня была такая же проблема на самом деле - ни одно из предложений не работало для меня (HTML-экраны не работают по какой-либо причине). Если это помогает - попробуйте закрыть {@code} перед проблемным символом и снова открыть его, например:
{@code nincompoop = "} ${person} {@code" /" > }
Это не похоже на решение, но оно работает и не прерывает форматирование, если использовать его тщательно:)
Как минимум, на Java 1.8.0_31 я больше не могу воспроизвести проблему. Ваш вход отображается как ожидалось:
<code><custom:meatball color="<%= Meatball.RED %> nincompoop="${person}" /></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 }.
Так что в этом случае невозможно сделать лучше.
К сожалению, я не смог найти аналогичную цитату для @code
, которая поддерживает мои эксперименты.
Используйте {@literal}
, так что сделайте это {@literal } }
. Работает в моих тестах.
Итак, для вашего случая это будет выглядеть так:
/**
* Gets the meatball icon for a nincompoop.
*
* <p>
* Example: {@code <custom:meatball color="<%= Meatball.RED %> nincompoop="${person{@literal } }" />}
*
* @author King Cong
*
*/
Найден еще меньше, чем звездное обходное решение для этого. Это лучше или хуже других? Я позволю тебе решить. Возьмите часть {@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<}
, тогда вы можете использовать <
. Результат будет выглядеть следующим образом:
/**
* Gets the meatball icon for a nincompoop.
*
* <p>
* Example: <code> <custom:meatball color="<%= Meatball.RED %> nincompoop="${person}" /></code>
*
* @author King Cong
*
*/
Не являются отличными решениями, но они действительно работают.