Я в замешательстве, как @SuppressWarnings работает внутри. Если мы видим, исходный код этого, это то, что, как показано ниже:Как работает @SuppressWarnings и другие пользовательские аннотации?
@Retention(SOURCE)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
public @interface SuppressWarnings
{
String[] value();
}
Теперь, если мы видим, что получение реализован в коде, это что-то вроде,
@SuppressWarnings({"unused"})
public static void main(String args[]){
int i;
}
Итак вопросы: -
1) Как только мы передаем «неиспользуемый» в качестве параметра, затмение перестает бросать предупреждение. Точно так же мы можем использовать «unchecked», «debrecation» и т. Д. Так как это работает? Я имею в виду, что у нас есть только метод с именем value() в @interface, а его тип возврата - String []. Так оно делает все, как? И почему имя метода value()? Имеет ли этот метод какое-то особое значение, которое выполняет что-то внутренне, чтобы уловить такие параметры, как «неиспользуемый»?
2) Иногда мы видим, что в некотором @interface есть значение по умолчанию, указанное ниже. Итак, что такое дефолт? Из java8 у нас есть новая концепция методов по умолчанию. Но это значение по умолчанию используется и в нижней версии java. Как это работает и что это такое? Является ли это ключевым словом в версиях ниже java8?
public @interface MyIntf{
/**
* The error message.
*/
String message() default "My Default Message";
/**
* The group.
*/
Class<?>[] groups() default {};
/**
* the payload.
*/
Class<? extends Payload>[] payload() default {};
}
Что касается ключевого слова вопроса, 'default' всегда было ключевым словом, поскольку оно используется в 'switch'. – RealSkeptic
ya default всегда использовался в корпусе коммутатора. Что-то вроде, если оно не находит подходящего случая, переходит в значение по умолчанию. Но как это работает здесь. – Deca
"и другие пользовательские аннотации"? '@ SuppressWarnings' не является аннотацией * custom *. Это из пакета 'java.lang', поэтому он не получает больше * ядра *, чем это. – Andreas