Java,как получить значение параметра аннотации?
Есть класс помеченный аннотацией @haveArea с параметром name, как получить значение параметра.
@haveArea(name = "Прямоугольник")
public class Rectangle {
double a;
double b;
public Rectangle(double a, double b) {
this.a = a;
this.b = b;
}
@returnArea
void getArea() {
System.out.println(a * b);
}
}
Ответы (2 шт):
Обычно, аннотация реализуется приблизительно так:
1)Декларируется интерфейс - haveArea
2)Далее пишется класс который реализует этот интерфейс, типа class MyHaveArea implements haveArea в рамках которого и собственно пишется сам код аннотации, причем параметры аннотации равны полям интерфейса, исходя из этого пишем код типа:
Rectangle rectangle; //сам объект
Class clazz = rectangle.getClass(); //класс объекта
Annotation[] annotations = clazz.getAnnotations(); //список аннотаций класса
for(Annotation annotation : annotations) {
//annotation теперь указывает на интерфейс аннотации `haveArea`
//список полей интерфейса
Field[] fields = annotation.getDeclaredFields();
for (Field field : fields) {
if (field.getName().compareTo("name")==0) //поле с именем name
System.out.println("name = " + field.get(rectangle).toString());
}
}
Пысы: не проверял, просто как идею кинул.
Сначала настроить аннотацию, чтобы она была доступна во время выполнения:
@Retention(RetentionPolicy.RUNTIME)
@interface haveArea {
...
}
А потом с помощью метода Class.getAnnotation:
haveArea annotation = Rectangle.class.getAnnotation(haveArea.class);
System.out.println(annotation.name);
И еще. В java есть соглашение о наименовании, согласно которому аннотации (как и классы и интерфейсы) должны начинаться с большой буквы.