Я написал небольшой класс, который считывает аннотации из методов.
Теперь я хочу расширить этот класс, чтобы сделать его более динамичным.
Мой класс использует на данный момент следующий код для считывания аннотации:
ExtendedCommandAnnotation e = foo.getClass()
.getAnnotation(ExtendedCommandAnnotation.class);
String startTag = e.annoPropStartTag();
Это простой случай с фиксированной аннотацией.
В новой версии у меня нет фиксированной аннотации. Я получу аннотацию ExtendedCommandAnnotation в переменной.
Поэтому приведенный выше код будет отредактирован по адресу:
String className= "ExtendedCommandAnnotation";
??? e = foo.getClass().getAnnotation(Class.forName(className));
String startTag = e.annoPropStartTag();
Я не знаю, что я поставлю вместо ??? Я попробовал это с помощью аннотации, но потом не могу получить свойства с помощью определенных методов.
Есть ли способ заставить это работать?
Моя аннотация "класс":
@Retention( RetentionPolicy.RUNTIME )
public @interface ExtendedCommandAnnotation
{
String annoPropUseTab() default "0";
String annoPropStartTag() default "";
String annoPropEndTag() default "";
}
EDIT:
Наконец-то я получаю нечто подобное:
String [] cmdMethNames = this.getAvailableCommandNames ();
Class<?> annotationClass = Class.forName(this.annotationClassName);
for( Method meth : cmdMeth )
{
HashMap<String, String> tempAnno = new HashMap<String, String>();
if (meth.isAnnotationPresent((Class<? extends Annotation>) annotationClass))
{
Annotation anno = meth.getAnnotation((Class<? extends Annotation>) annotationClass);
[...]
}
[...]
}
Но приведение к (Class<? extends Annotation>)
делает следующее предупреждение: " Безопасность типов: непроверенное приведение из класса В Class <? Extends Аннотация> "