Вы можете передавать значения по умолчанию методам-членам аннотаций, которые будут использоваться, если не задано значение при вставке аннотации. Значение по умолчанию указывается с помощью ключевого слова default в объявлении метода-члена. Синтаксическая запись такого объявления приведена в следующей строке:
type member() default value;
В приведенной записи значение value должно иметь тип, совместимый с типом type.
Далее приведен фрагмент, в котором в объявление интерфейса @MyАnno включены значения по умолчанию:
// Объявление типа аннотации и включение в него значений по умолчанию. @Retention(RetentionPolicy.RUNTIME)
@interface MyAnno {
String str() default "Testing";
int val() default 9000;
}
В приведенном объявлении методу-члену str передается значение по умолчанию "Testing", а методу val — 9000. Это означает, что при использовании аннотации типа @MyАnno не нужно задавать никаких значений. Однако при желании каждому методу-члену или обоим можно передать другие значения. Далее приведены четыре варианта применения аннотации типа @MyAnno:
@МуАnnо() // для str и val используются значения по умолчанию
@MyAnno(str = "some String") // для val использовано значение по
// умолчанию
@MyAnno(val = 100) // для str использовано значение по умолчанию
@MyAnno(str = "Testing"/ val = 100) // не используются значения по
// умолчанию
В листинге 7.4. приведен пример программы, в которой демонстрируется применение значений по умолчанию в аннотации.
Листинге 7.4 Использование значений по умолчанию в аннотации
import java.lang.annotation.*;
import java.lang.reflect.*;
// An annotation type declaration and include defaults.
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno {
String str() default "Testing";
int val() default 9000;
}
class Meta3 {
// Annotate a method using the default values.
@MyAnno()
public static void myMeth() {
Meta3 ob = new Meta3();
// Obtain the annotation for this method
// and display the values of the members.
try {
Class c = ob.getClass();
Method m = c.getMethod("myMeth");
MyAnno anno = m.getAnnotation(MyAnno.class);
System.out.println(anno.str() + " " + anno.val());
} catch (NoSuchMethodException exc) {
System.out.println("Method Not Found.");
}
}
public static void main(String args[]) {
myMeth();
}
}
Далее приведен вывод результатов работы программы из листинга 7.4:
Testing 9000
|