Добавил:
ПОИТ 2016-2020 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пацей 4 сем / Лекции / СТПI_2_ООП

.pdf
Скачиваний:
70
Добавлен:
29.04.2018
Размер:
15.18 Mб
Скачать

типы аннотаций:

аннотация-маркер

одночленная

многочленная

Правила создания - содержимое

1)Содержат атрибуты

2)public по умолчанию (каквинтерфейсах)

@interface Version { int value();

String author() default "UNKNOWN"

}

@interface Info {

Version[] value() default {};

}

1)можнообъявить значения по умолчанию

2)могут иметь тип массива (одномерного)

3)аннотация м.б. атрибутом аннотации

Ограничения на атрибуты примитивы

String

Class - классовый литерал

enum

annotation

массив элементов перечисленные выше

Встроенные аннотации

@Target - задает тип объявления, к которым может быть применима аннотация

@Target(ElementType.TYPE)

@Documented

@interface ClassAdditionInfo {

локальные переменные, обобщенные типы, суперклассы, интерфейсы,

исключения методов

import java.lang.annotation.*;

добавляет в документацию, создаваемую Javadoc

@Documented

@interface ClassAdditionInfo {

@Deprecated

Помечает объект как устаревший. Компилятор

создает предупреждение, если программа использует методы, поля или классы, помеченные как устаревшие

@Override — аннотация @Override сообщает компилятору, что мы собираемся переопределить метод родительского класса.

@Deprecated

@Override

public double TransferFromCard(DebetCard someCard) { return someCard.getSum()*234.45;

}

@SuppressWarnings —используется для устранения предупреждений, создаваемых компилятором

@SuppressWarnings ("use deprecate dmethod") @Deprecated

@Override

publicdouble TransferFromCard(DebetCard someCard) { return someCard.getSum()*234.45;

}

Политики удержания аннотации -

определяет, в какой точке аннотация сбрасывается

java.lang.annotation.RetentionPolicy - SOURSE,CLASS,RUNTIME.

SOURCE - содержаться только в исходном файле и отбрасываются при компиляции.

CLASS- в файле, недоступны во время выполнения. RUNTIME - сохраняются в файле во время компиляции

и остаются доступными во время выполнения.

@Retention (RetentionPolicy.RUNTIME)

Получение аннотации Reflaction API

@Retention (RetentionPolicy.RUNTIME)

@ClassAdditionInfo( author = "Lena", date = "23/2/2017", currentRevision = 2)

public class UnlimCard implements IBankActionParam<DebetCard> {

}

public static void main(String[] args) {

UnlimCard C234 = new UnlimCard();

Class<?> c = C234.getClass();

ClassAdditionInfo infoMyClass =

c.getAnnotation(ClassAdditionInfo.class); }

}

Repeating Annotations

повторяющиеся

SDK 24 и выше

аннотации могут

 

 

повторяться столько раз,

@Target( ElementType.TYPE )

сколько вы хотите в тех

же местах

@Retention( RetentionPolicy.RUNTIME )

 

public @interface Names {

 

Name[] value();

 

}

@Target( ElementType.TYPE )

@Retention( RetentionPolicy.RUNTIME )

@Repeatable( Names.class ) public @interface Name {

String value(); };

@Name( "Ivanov" ) @Name("Pertov" )

public interface INameable {

}

Соседние файлы в папке Лекции