Как читать аннотацию, объявленную над объектом.Как читать аннотацию, объявленную над объектом Java?
Для например
Аннотация:
AuthorInfo.java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface AuthorInfo {
String author() default "Dushyant Kumar";
String login() default "dushyantashu";
}
То, что я пытаюсь сделать:
Book.java
@Data
public class Book {
private int serialNo;
private String review;
}
Main.java
public class Main {
@AuthorInfo (
author = "Barry Allen",
login = "theflash"
)
private static Book book = new Book();
public static void main(String[] args) {
showAnnotation(book);
}
private static void showAnnotation(Object object) {
// How to get values of annotation declared over this object.
}
}
Моего UseCase заключается в создании этого общего showAnnotation()
метода, поэтому пары являются Object
. Как достичь этого? Из того, что я изучил, я только получил способы прочитать аннотацию, если она объявлена над классом или объявлена над членом класса. Разве нет способа, с помощью которого объект может быть прочитан, если какая-либо аннотация присутствует над ним?
Thanks
Аннотации - это статическая информация о типах и элементах. Они не объявляются «над этим объектом». Вы можете прочитать его через 'Main.class.getDeclaredField (« book »). GetAnnotation (AuthorInfo.class)', поскольку он является свойством * field *, а не экземпляром 'Book'. Тот же экземпляр «Книга» может ссылаться на разные поля, имеющие совершенно разные аннотации. – Holger
@Holger Это имеет смысл, поэтому единственный способ, которым я мог бы иметь разные значения аннотаций над объектами того же класса, - иметь их как членов какого-либо другого класса. Это правильно? – dushyantashu
Поскольку вы аннотируете поля, эти поля могут быть в любом классе, который вам нужен, включая тот же класс, что и их объявленный тип, т. Е. Вы можете иметь аннотированные поля типа «Книга» в классе «Книга».Тем не менее, это не связано с ссылочным экземпляром; несколько полей могут ссылаться на один и тот же экземпляр, или поля могут быть «null», все это не имеет значения, аннотации - это просто свойство полей. И где смысл в попытке переносить конкретные данные в аннотации? Почему бы не объявить обычный 'AuthorInfo' класс и обычный член этого типа в' Book'? – Holger