Вернуться в список

Аннотации в Java. @Inherited

В этой статье речь пойдет о четвертой (последней) стандартной аннотации для других аннотаций, а именно, об аннотации @Inherited. Как следует из названия, эта анотация означает, что она автоматически наследуется в дочерних классах описанного аннотацией класса.

Сложный для понимания текст легко можно упростить с помощью следующего примера.

Допустим, у нас есть аннотация @Mammal (млекопитающее):

package com.seostella.annotation.def;

import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;

@Target(ElementType.TYPE)
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Mammal {
    String sound();

     int color();
}

@Mammal помечена аннотацией @Inherited. Теперь воспользуемся этой аннотацией в классе Giraffe:


package com.seostella.annotation.domain;

import com.seostella.annotation.def.HasHorn;
import com.seostella.annotation.def.Mammal;

@Mammal(color = 0xFFA844, sound = "uuuu")
public class Giraffe {
    
    @HasHorn
     public void drawHead() {
       }
    
}

Создадим класс, унаследованный от Giraffe:


package com.seostella.annotation.domain;

public class FeatureGiraffe extends Giraffe {

}

Теперь класс FeatureGiraffe содержит аннотацию @Mammal класса Giraffe, то есть, следующую аннотацию:

@Mammal(color = 0xFFA844, sound = "uuuu")

Это происходит благодаря аннотации @Inherited.

В следующей (последней) статье из данного цикла будет рассмотрено как в процессе выполнения программы получить информацию об аннотациях, использованных вместе с классом если тип аннотации RetentionPolicy.RUNTIME.

19.08.2015

    Только зарегистрированные пользователи могут оставить комментарий.
    Вернуться в список
    2017 «Инфокристалл» Сборка от 18.04.2017 03:58
    Контакты | Задать вопрос

    Карта сайта