Итак есть аннотация @MyAnno
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnno {
String value();
}
Почему я не могу получить доступ к ее значению через код clazz.getAnnotation(MyAnno.class)
с помощью метода value()
,где Class clazz = object.getClass();
При работе с полями класса все ок, то есть этот код работает field.getAnnotation(MyAnno.class).value()
, где field
это элемент массива
Field[] fields = clazz.getDeclaredFields()
P.S clazz.isAnnotationPresent(MyAnno.class)
выдает true
Предположим, есть такой класс:
@MyAnno("vvv")
public class Anno
{
@MyAnno("xxx")
public final int x = 0;
}
Тестовый код для получения аннотации этого класса:
public static void main(String[] args)
{
Object object = new Anno();
Class<?> clazz = object.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields)
{
MyAnno myAnno = field.getAnnotation(MyAnno.class);
System.out.println("Field value: " + myAnno.value());
}
MyAnno myAnno = clazz.getAnnotation(MyAnno.class);
System.out.println("Class value: " + myAnno.value());
}
На экран выводится:
Field value: xxx
Class value: vvv
Если использовать
Class clazz = object.getClass();
то придётся явно приводить тип:
MyAnno myAnno = (MyAnno)clazz.getAnnotation(MyAnno.class);
Потому что при использовании raw-type (Class
) происходит стирание generic-типов в методах, из-за чего метод getAnnotation
начинает возвращать просто Annotation
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Все ресурсы, которые я получаю из этого Skin через метод getDrawable, отображаются как чёрные прямоугольникиКогда я беру незапакованный ресурс,...
У меня есть dev серевер на котором крутится angular 2 по адрусу localhost:4200, и tomcat со Spring на localhost:8080Пробую загрузить файл на сервер следующим способом:...
На проекте есть три экрана: первый - для загрузки данных, используется AsyncTaskВторая получает данные с первой
Как возможно до начала своих тестов сделать рестарт приложения или же убить свою активность? Потому как если этого не делать, то данные который...