Пацей 4 сем / Лекции / СТПI_2_ООП
.pdf►типы аннотаций:
аннотация-маркер
одночленная
многочленная
Правила создания - содержимое
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 {
}