Представляя аннотациями

J2SE 5.0 введено много новых возможностей языка. Они включают поддержку для обобщения и улучшенный цикл. Предыдущий Tech Tips охватывает дженерики и улучшенный цикл. Другим важным нововведением в J2SE 5.0 аннотации. Этот совет изучает аннотации, которые встроены в J2SE 5.0.

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

Концепция внедрения метаданных в исходный код не является новой с J2SE 5.0. Вы можете добавить @ устаревшего тега Javadoc комментариев метода и компилятор воспринимает это как метаданные о методе. Эта способность была в месте с 1,0 освобождении J2SE. Исходная версия платформы уже устаревшими методами, GETENV () Метод системы (хотя это не было в спецификации языка программирования Java до 1,1 добавление). Концепция почти такое же, теперь, по крайней мере, @ частью синтаксиса. Только расположение изменилось — аннотации тэг в источнике, а не комментария. Основным моментом здесь является то, что аннотация систематический способ поддержки декларативной модели программирования.

Это приводит к первой аннотацией, которая поставляется с J2SE 5.0: @ рекомендуется. Обратите внимание на капитал D здесь. Функциональный, @ Запрещены Источник работает так же, как @ устаревшим Javadoc, связанный с классом или методом. По маркировки методами с @ Запрещены тега, вы предупреждений компилятора, чтобы предупредить пользователей при использовании метода или класса.

Следующие основные классе метод с именем deprecatedMethod (), который помечен @ Запрещены аннотации и, @ устаревшим комментарий:


   public class Main {

   

     /**

      @deprecated Out of date. Use System.foobar() instead.

     */ 



     @Deprecated

     public static void deprecatedMethod() {

       System.out.println("Don't call me");

     }

   }

Вы составить класс с аннотациями, так же, как вы делаете для одного без аннотации:

> javac Main.java

Как и ожидалось, это производит Main.class.

Если вы используете устаревшие методы, производит компиляцию времени предупреждение — так же, как использование устаревшей @ тег в Javadoc. Вот пример:


   public class User {

     public static void main(String args[]) {

       Main.deprecatedMethod();

     }

   }

Обобщение класс:

> javac User.java

и вы увидите следующее предупреждение об использовании устаревшего метода:

Note: User.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

Добавление-Xlint к составлению линия показывает, что конкретно является неправильным:

> javac -Xlint:deprecation User.java
User.java:3: warning: [deprecation] deprecatedMethod() in
Main has been deprecated
Main.deprecatedMethod();
^
1 warning

Переход от устаревшей @ комментарий к @ Запрещены аннотации не вносит ничего существенно нового в систему. Она лишь слегка изменяет способ делать то же самое. Две другие новые аннотации доступны на платформе J2SE 5.0, @ и @ Override SuppressWarnings, делать новые функциональные возможности платформы.

Аннотации @ Override может быть использован метод деклараций. Как следует из названия, вы используете @ Override аннотации к флагом метода, который должен переопределить метод суперкласса. Почему это? Чтобы найти ошибку раньше. Сколько раз вы хотели, чтобы переопределить метод, но либо ошибки название метода, указаны неправильные аргументы, или же другого типа взамен? Иными словами, как часто вы определили новый метод, когда то, что вы действительно хотели сделать, это переопределить существующую? С помощью @ Override, вы обнаружите проблемы в следующий класс скорее рано, чем поздно:


   public class Overrode {

     @Override

     public int hashcode() {

       return 0;

     }

     

     @Override

     public boolean equals(Object o) {

       return true;

     

   }

Проблема здесь в том, что имя метода должно быть HashCode, а не хэш. Предположим, что объявление метода похоронен в источник для гораздо большего класса. Без первого @ Override аннотации, сколько времени потребуется, чтобы вы знали, что Ваш хэш () метод (с верблюжьей случае для работы с орфографическими, не все в нижнем регистре) не вызывается, и вы получаете по умолчанию поведение родительского объекта класс? Благодаря аннотации @ Override, составление класс производит ошибка компиляции, предупреждая вас к этой проблеме:

> javac Overrode.java
Overrode.java:2: method does not override a method from its
superclass
@Override
^
1 error

Чем раньше вы можете обнаружить ошибки такого рода, стоимость коррекции становится значительно сокращены. Обратите внимание, что хэш () метод никогда не должен вернуться постоянно. Для более полного описания надлежащее использование хэш () и составляет (), см. пункт 8 в книгу Эффективное программирование на языке Java руководством Джошуа Блоха.

Окончательный трех новых аннотаций в J2SE 5.0, @ SuppressWarnings, является наиболее интересным. Она сообщает компилятору не предупредить вас о том, чего он обычно предупреждает Вас о. Предупреждение относятся к категории, так что вы должны сказать аннотации, какие типы предупреждений подавить. Javac компилятор определяет семь вариантов подавить: все, неодобрение, не остановить, проваливаемся, пути, последовательно и окончательно. (Спецификации языка определяет только два таких типа: неодобрение и бесконтрольно.)

Чтобы продемонстрировать, давайте посмотрим на пресечение проваливаемся вариант. Давайте начнем со следующего класса. Обратите внимание, что класс отсутствует перерыв заявлении за каждый случай переключатель заявление:


   public class Fall {

     public static void main(String args[]) {

       int i = args.length;

       switch (i) {

         case 0:  System.out.println("0");

         case 1:  System.out.println("1");

         case 2:  System.out.println("2");

         case 3:  System.out.println("3");

         default: System.out.println("Default");



       }

     }

   

Обобщение класс с Javac. Вы увидите, что оно просто создает файлы. Файле класса, и не проявляет никаких предупреждений:

javac Fall.java

Если вы хотите, чтобы компилятор предупредит вас о переключении заявлений, которые попадают через (то есть одно или несколько заявлений перерыва отсутствует), вам компилировать с-Xlint: проваливаемся вариант:

javac -Xlint:fallthrough Fall.java

Это дает следующее предупреждение:

Fall.java:6: warning: [fallthrough] possible fall-through
into case
case 1: System.out.println("1");
^
Fall.java:7: warning: [fallthrough] possible fall-through
into case
case 2: System.out.println("2");
^
Fall.java:8: warning: [fallthrough] possible fall-through
into case
case 3: System.out.println("3");
^
Fall.java:9: warning: [fallthrough] possible fall-through
into case
default : System.out.println("Default");
^
4 warnings

Но что если вы хотите игнорировать тот факт, что переключатель заявлении отсутствует перерыв заявлением в каждом конкретном случае? Вот где @ SuppressWarnings аннотацию вступает в игру. Если добавить следующие строки перед основными () Метод декларации:

@SuppressWarnings("fallthrough")

Компиляция класс-Xlint: проваливаемся вариант:

javac -Xlint:fallthrough Fall.java

создадим. классе файла и отображения никаких предупреждений.

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

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

Существует гораздо больше, что можно сделать, когда вы определите свой собственный аннотации, а не использовать те, которые уже определены в J2SE 5.0. Дополнительную информацию об определении аннотации см.

Copyright (C) 2004-2005 Sun Microsystems, Inc
Все права защищены.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>