2011-08-08 3 views
0

Цитируя это link:Аннотация понятия в Java

Некоторые разработчики считают, что компилятор Java понимает тег и работу соответствующим образом. Это неправильно. Теги фактически не имеют значения для компилятора Java или самого времени выполнения. Есть справки, которые могут видеть следующие данные

.

Если информация, содержащаяся в аннотации, является только метаданные, почему мой код не компилируется, если я ошибочно комментирую? Эту конкретную аннотацию следует просто игнорировать?

Edit:

Просто привести пример ... Простой JAX-RS веб-сервис на Джерси использует аннотацию, как:

@Path("mypath") 

Теперь, если я изменить это:

@Paths("mypath") 

ИЛИ

@Path(123) 

, это НЕ должно мешать мне компилировать код в соответствии с приведенной выше ссылкой ...

+0

Что вы указали неправильно? Любой пример, который вы можете предоставить? –

+0

Возможно, это похоже на то, что когда компилятор видит знак @ для аннотации, он просто игнорирует его, ожидая, что на него будут работать другие инструменты. –

+0

Определяется, какие аннотации вы используете. –

ответ

5

Статья не подходит, по крайней мере, для некоторых аннотаций. Думает, что @SuppressWarnings и @Override компилятор делает имеют очень специфические знания. Фактически, статья указывает на это сам:

Метаданные используются компилятором для выполнения базовой проверки времени компиляции. Например, существует аннотация переопределения, которая позволяет указать, что метод переопределяет другой метод из суперкласса.

Совсем как он может быть использован компилятором, если «метки на самом деле не имеют никакого значения в Java компилятор», я не знаю ...

Кроме того, даже для аннотаций, что компилятор Безразлично 't присоединить какой-либо семантический значение, он все равно будет проверять, что при попытке указать конкретные аргументы и т. д. эти аргументы имеют разумные имена и типы для используемой аннотации.

0

Аннотации - это в основном специальная форма интерфейса, поэтому компилятор должен иметь возможность загрузить определение аннотации, чтобы кодировать информацию, чтобы она могла быть включена в файл класса. Как только он находится в файле класса, загрузчик класса загрузит его как часть класса, так что инструменты обработки аннотаций могут получить доступ к этой информации. Компилятор проверяет, что используются только определенные аргументы, а также значения по умолчанию для атрибутов, которые не указаны (и определены по умолчанию).

Смежные вопросы