Ошибка из-за содержания в юридическом комментарии в Java - PullRequest
1 голос
/ 10 февраля 2012

На этой ссылке на кодовую ветку я обнаружил, что следующий комментарий выдаст ошибку компилятора: -

// Compiler Error due to this Unicode char '\u000a'

Причина в том, что последовательность Unicode напрямую заменяется фактическим символом, которому она соответствует. Поскольку '\ u000a' соответствует символу newLine, newLine помещается в то место, где находится '\ u000a'.

Мой вопрос таков: «Есть ли другой способ получить ошибку компиляции из-за комментария?»

Ответы [ 4 ]

4 голосов
/ 10 февраля 2012

"Компилятор не только переводит экранированные символы Юникода в символы, которые они представляют, перед тем как он анализирует программу в токены [...], но и перед удалением комментариев и пробелов [JLS 3.2]." Java ™ Puzzlers: ловушки, ловушки и угловые случаи Джошуа Блох, Нил Гафтер.

И следующие строки - действительный код Java:

\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020
\u0063\u006c\u0061\u0073\u0073\u0020\u0055\u0067\u006c\u0079
\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020
\u0020\u0020\u0020\u0020\u0073\u0074\u0061\u0074\u0069\u0063
\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028
\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0020
\u0020\u0020\u0020\u0020\u0061\u0072\u0067\u0073\u0029\u007b
\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074
\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0020
\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0077\u0022\u002b
\u0022\u006f\u0072\u006c\u0064\u0022\u0029\u003b\u007d\u007d
2 голосов
/ 10 февраля 2012

Если вы определили функцию, которая устарела в комментарии (@deprecated), и вы настроите свой компилятор на выдачу ошибок при использовании устаревших методов (по крайней мере, внутренний компилятор Eclipse можно настроить, как это было, AFAIK)

1 голос
/ 10 февраля 2012
/* Compiler Error due to this Unicode char '*/' */
0 голосов
/ 10 февраля 2012

Эта ошибка не вызвана самим комментарием. Если вы используете тот же \u000a где-нибудь в вашем коде, вы получите такую ​​же ошибку. Например:

// This will give you a similar error
char c = '\u000a';

Тот факт, что escape-последовательность содержится в комментарии в вашем примере, не означает, что комментарий является причиной ошибки.

...