Что такое аннотация:
Аннотация (аннотация) — это способ и метод, предоставляемый Java для связывания любой информации и любых метаданных (метаданных) с элементами метапрограммы. Аннотация (аннотация) — это интерфейс. Программа может получить объект «Аннотация» указанного элемента программы посредством отражения, а затем получить метаданные в аннотации через объект «Аннотация».
Аннотация (аннотация) введена в JDK5.0 и более поздних версиях. Его можно использовать для создания документации, отслеживания зависимостей в вашем коде и даже выполнения базовых проверок во время компиляции. В некотором смысле аннотации используются как модификаторы и применяются к объявлению пакетов, типов, конструкторов, методов, переменных-членов, параметров и локальных переменных. Эта информация хранится в паре структур «имя=значение» аннотации.
Члены аннотации объявляются как методы без параметров в типе аннотации. Имя его метода и возвращаемое значение определяют имя и тип члена. Здесь существует определенный синтаксис по умолчанию: разрешено объявлять значение по умолчанию для любого элемента аннотации: аннотация может использовать пару имя = значение в качестве значения элемента аннотации, который не определяет значение по умолчанию. Конечно, имя. Пара =value также может использоваться для переопределения значения по умолчанию для других элементов. Это чем-то похоже на характеристики наследования классов. Конструктор родительского класса может использоваться как конструктор по умолчанию для подкласса, но он также может быть переопределен подклассом.
Аннотация может использоваться для связи любой информации с программным элементом (классом, методом, переменной-членом и т. д.). Следует отметить, что здесь есть основное правило: аннотация не может влиять на выполнение программного кода. Независимо от того, добавлена или удалена аннотация, код будет выполняться последовательно. Кроме того, хотя доступ к некоторым аннотациям во время выполнения осуществляется через методы API отражения Java, интерпретатор языка Java игнорирует эти аннотации во время работы. Именно потому, что виртуальная машина Java игнорирует аннотацию, тип аннотации «не работает» в коде, и информация в типе аннотации может быть доступна и обработана только с помощью некоторых вспомогательных инструментов; В этой статье будут рассмотрены стандартные типы аннотаций и метааннотаций. Инструментом, который сопровождает эти типы аннотаций, является компилятор Java (который, конечно, обрабатывает их особым образом).
-------------------------------------------------- ----------------------------------
Что такое метаданные (метаданные):
Метаданные переводятся от слова метаданные, что означает «данные о данных».
Метаданные имеют множество функций. Например, вы могли использовать комментарии Javadoc для автоматического создания документации. Это один из типов функции метаданных. В общем, метаданные можно использовать для создания документации, отслеживания зависимостей кода, выполнения проверок формата во время компиляции и замены существующих файлов конфигурации. Если мы хотим классифицировать роль метаданных, в настоящее время не существует четкого определения, но мы можем грубо разделить их на три категории в зависимости от их роли:
1. Написание документов: создание документов с помощью метаданных, указанных в коде. 2. Анализ кода: анализ кода с помощью метаданных, указанных в коде. 3. Проверка компиляции: используя метаданные, указанные в коде, компилятор может выполнить базовую компиляцию. Убедитесь, что метаданные в Java существуют в коде Java в виде тегов. Существование тегов метаданных не влияет на компиляцию и выполнение программного кода. Они используются только для создания других файлов или для определения кода, выполняемого во время выполнения. информация.
В итоге:
Во-первых, метаданные существуют в коде Java в виде тегов.
Во-вторых, информация, описываемая метаданными, является типобезопасной, то есть поля метаданных имеют четкие типы.
В-третьих, метаданные требуют дополнительной обработки инструментами, отличными от компилятора, используемого для создания других компонентов программы.
В-четвертых, метаданные могут существовать только на уровне исходного кода Java или внутри скомпилированного файла класса.
-------------------------------------------------- ----------------------------------
Типы аннотаций и аннотаций:
Аннотация:
Аннотации используют новый синтаксис, представленный в java5.0, и их поведение очень похоже на такие модификаторы, как public и Final. Каждая аннотация имеет имя и количество членов >=0. Каждый член аннотации имеет имя и значение, называемое парой имя=значение (как и JavaBean), а имя=значение загружает информацию аннотации.
Тип аннотации:
Тип аннотации определяет имя, тип и значение по умолчанию для элемента аннотации. Можно сказать, что тип аннотации представляет собой специальный интерфейс Java. Его переменные-члены ограничены, и при объявлении типа аннотации требуется новый синтаксис. Когда мы получаем доступ к аннотации через API отражения Java, возвращаемое значение будет объектом, реализующим интерфейс типа аннотации. Получив доступ к этому объекту, мы можем легко получить доступ к его членам аннотации. В следующих главах будут упомянуты три стандартных типа аннотаций, включенных в пакет java.lang java5.0.
-------------------------------------------------- ----------------------------------
Категории аннотаций:
По количеству параметров аннотации мы можем разделить аннотации на три категории:
1. Метка аннотации. Тип аннотации без определения элемента называется меткой аннотации. Этот тип аннотации использует только свое присутствие или отсутствие для предоставления нам информации. Например, следующая системная аннотация @Override;
2. Аннотация одного значения. 3. Полная аннотация.
В зависимости от использования и цели аннотаций мы можем разделить аннотации на три категории:
1. Встроенные системные аннотации JDK 2. Мета-аннотации 3. Пользовательские аннотации
-------------------------------------------------- ----------------------------------
Встроенные стандартные аннотации системы:
Синтаксис аннотаций относительно прост, за исключением использования символа @, он в основном соответствует внутреннему синтаксису Java. В JavaSE встроены три стандартных аннотации, которые определены в java.lang:
@Override: используется для изменения этого метода, чтобы переопределить метод родительского класса;
@Deprecated: используется для изменения устаревших методов;
@SuppressWarnings: используется для уведомления компилятора Java о необходимости подавления определенных предупреждений компиляции.
Давайте по очереди рассмотрим функции и сценарии использования трех встроенных стандартных аннотаций.
-------------------------------------------------- ----------------------------------
@Override, ограничить переопределение методов родительского класса:
@Override — это тип аннотации маркера, который используется для аннотирования методов. Это показывает, что аннотированный метод перегружает метод родительского класса и играет роль утверждения. Если мы используем этот вид аннотации в методе, который не переопределяет метод родительского класса, компилятор Java предупредит вас об ошибке компиляции. Эта аннотация часто вступает в действие, когда мы пытаемся переопределить метод родительского класса, но пишем неправильное имя метода. Использование чрезвычайно просто: при использовании этой аннотации просто добавьте @Override перед измененным методом. Следующий код представляет собой пример использования @Override для изменения метода displayName() при попытке переопределить родительский класс, но с орфографическими ошибками:
общественный недействительный displayName () {
System.out.println("Имя фрукта: *****");
}
}
класс Orange расширяет Fruit {
@Override
общественный недействительный displayName () {
System.out.println("Название фрукта: апельсин");
}
}
класс Apple расширяет Fruit {
@Override
общественное недействительное отображаемое имя () {
System.out.println("Название фрукта: Яблоко");
}
}
@Deprecated, тег устарел:
Аналогично, «Устарело» также является аннотацией разметки. Если тип или член типа украшен @Deprecated, компилятор будет препятствовать использованию этого аннотированного программного элемента. И такая модификация имеет определенную степень «непрерывности»: если мы используем этот устаревший тип или член в коде посредством наследования или перезаписи, хотя унаследованный или переопределенный тип или член не объявлен @Deprecated, компилятор все равно должен предупредить ты.
Стоит отметить, что существует разница между типом аннотации @Deprecated и тегом @deprecated в javadoc: первый распознается компилятором Java, а второй распознается инструментом javadoc и используется для создания документации (в том числе почему программа члены устарели, а также описание того, как их следует запретить или заменить).
В Java 5.0 компилятор Java по-прежнему ищет теги @deprecated Javadoc и использует их для создания предупреждающих сообщений, как это было в предыдущих версиях. Но эта ситуация изменится в последующих версиях, и нам следует начать использовать @Deprecated сейчас для украшения устаревших методов вместо тега @deprecated javadoc.
В следующей программе аннотация @Deprecated используется для обозначения метода как устаревшего. В то же время тег @deprecated используется в аннотации метода для обозначения метода как устаревшего. Код выглядит следующим образом:
/**
* @deprecated Срок действия этого метода истек, поэтому использовать его не рекомендуется.
*/
@Устарело
общественный недействительный showTaste () {
System.out.println("Вкус фруктовых яблок: свежий и сладкий");
}
общественная недействительность showTaste (int typeId) {
если(typeId==1){
System.out.println("Вкус яблока: кислый");
}
иначе, если(typeId==2){
System.out.println("Вкус фруктовых яблок: сладкий");
}
еще{
System.out.println("Вкус фруктовых яблок: свежий и сладкий");
}
}
}
публичный класс FruitRun {
/**
* @param аргументы
*/
public static void main(String[] args) {
Apple apple=новое Apple();
яблоко.displayName();
AppleService appleService = новый AppleService ();
appleService.showTaste();
appleService.showTaste(0);
appleService.showTaste(2);
}
}
-------------------------------------------------- ----------------------------------
SuppressWarnings, подавлять предупреждения компилятора:
@SuppressWarnings используется для выборочного отключения предупреждений компилятора для классов, методов, переменных-членов и инициализации переменных. В java5.0 компилятор javac, предоставленный sun, предоставляет нам опцию -Xlint, позволяющую компилятору предупреждать о допустимом программном коде. Это предупреждение в некоторой степени представляет собой ошибку программы. Например, когда мы используем общий класс коллекции, не указывая его тип, компилятор выдает предупреждение «непроверенное предупреждение». Обычно, когда это происходит, нам нужно найти код, вызвавший предупреждение. Если это действительно представляет собой ошибку, нам необходимо ее исправить. Например, если в предупреждающем сообщении указано, что оператор переключения в нашем коде не охватывает все возможные случаи, нам следует добавить случай по умолчанию, чтобы избежать этого предупреждения.
Иногда мы не можем избежать этого предупреждения. Например, мы не можем избежать этого непроверенного предупреждения, когда мы используем универсальный класс коллекции, который должен взаимодействовать со старым неуниверсальным кодом. В этот раз вам пригодится @SuppressWarning. Добавьте модификацию @SuppressWarnings перед вызываемым методом, чтобы компилятор прекратил выдавать предупреждения об этом методе.
SuppressWarning не является аннотацией разметки. Он имеет член типа String[], значением этого члена является имя запрещенного предупреждения. Для компилятора javac имена предупреждений, допустимые для параметра -Xlint, также допустимы для @SuppressWarings, и компилятор игнорирует нераспознанные имена предупреждений.
Синтаксис аннотации позволяет использовать круглые скобки после имени аннотации. В круглых скобках указаны разделенные запятыми пары имя=значение, используемые для присвоения значений членам аннотации. Примеры следующие:
@SuppressWarnings(value={ "rawtypes", "unchecked" })
публичный статический список<Fruit> getFruitList(){
List<Fruit> FruitList=new ArrayList();
вернуть список фруктов;
}
@SuppressWarnings({ "rawtypes", "не отмечено" })
публичный статический список<Fruit> getFruit(){
List<Fruit> FruitList=new ArrayList();
вернуть список фруктов;
}
@SuppressWarnings («не используется»)
public static void main(String[] args){
List<String> strList=new ArrayList<String>();
}
}
Краткое описание общих значений параметров, аннотированных SuppressWarnings:
1.deprecation: предупреждение при использовании устаревших классов или методов;
2. не отмечено: предупреждение при выполнении непроверенного преобразования, например, при использовании коллекции дженерики не используются для указания типа сохраняемой коллекции;
3.fallthrough: Предупреждение, когда программный блок Switch приводит непосредственно к следующей ситуации без Break;
4.путь: предупреждение, если в пути к классу, пути к исходному файлу и т. д. имеются несуществующие пути;
5.serial: предупреждение, когда определение SerialVersionUID отсутствует в сериализуемом классе;
6.finally: предупреждение, когда какое-либо предложениеfinally не может быть завершено нормально;
7.all: Предупреждение обо всех вышеперечисленных ситуациях.