Использование объявления интерфейса @interface по умолчанию в Java - PullRequest
52 голосов
/ 26 февраля 2009

Я только что обнаружил эту функцию.

Объявление интерфейса с использованием синтаксиса "@interface" позволяет установить значение по умолчанию.

public @interface HelloWorld { 
     public String sayHello() default "hello world";
}

Это что-то новое для меня. Как это значение по умолчанию предполагается использовать.

Я не могу найти ссылки на это, потому что www полон документов интерфейса Java до добавления "@" в Java 1.5 (это было на .5 или в .4?)


EDIT

Спасибо за ответы (я был как-то близок к "аннотации", поскольку я уже использую тег): P

Я знал, что должен был прочитать этот документ много лет назад !!! ... посмотрим ...

Многие API требуют большого количества стандартного кода. Для ....

Ответы [ 2 ]

60 голосов
/ 26 февраля 2009

Вы только что написали аннотацию .

В частности, в отношении оператора default: он используется, потому что у аннотаций и интерфейсов не может быть конструкторов, поэтому это единственный способ получить значение по умолчанию для атрибута аннотации. Из спецификации языка Java :

Для элемента типа аннотации может быть указано значение по умолчанию. Это можно сделать, следуя его (пустому) списку параметров с ключевым словом default и значением элемента по умолчанию.

Значения по умолчанию применяются динамически во время чтения аннотаций; значения по умолчанию не скомпилированы в аннотации. Таким образом, изменение значения по умолчанию влияет на аннотации даже в тех классах, которые были скомпилированы до внесения изменений (при условии, что в этих аннотациях отсутствует явное значение для элемента по умолчанию).

Замечу, что ни одна из аннотаций в java.lang.annotation не использует значения по умолчанию.


Использование: У вас есть аннотация @HelloWorld с атрибутом sayHello. Вы могли бы поместить это в класс как это:

@HelloWorld(sayHello="Hi")
public class MyClass {
}

Поскольку у вас есть значение по умолчанию, вы можете просто поставить

@HelloWorld
public class MyClass {
}

(Обратите внимание, что в документе говорится: «В аннотациях с одним элементом этот элемент должен называться value»; я считаю, что единственная причина для этого заключается в том, что вы можете просто написать @HelloWorld("Hi") без указания имени параметр.)

Как написано, ваша аннотация может использоваться для любого допустимого элемента программы (включая методы и объявления переменных). Вы можете изменить это с помощью аннотации @Target.

Наконец, установка RetentionPolicy позволяет вам решить, следует ли аннотации отбрасываться компилятором, сбрасываться виртуальной машиной или сохраняться всегда.


Два пакета, которые также могут быть интересны: javax.annotation и javax.annotation.processing . И здесь - пример использования обработки аннотаций для анализа исходного кода.

4 голосов
/ 26 февраля 2009

Это аннотация , которую вы объявляете не интерфейсом. Это было добавлено в Java 1.5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...