Я написал небольшой класс, который читает аннотацию из методов.
Теперь я хочу расширить этот класс, чтобы сделать его более динамичным.Динамические переменные с заданным типом
Моего класс использует в данный момент следующего кода для считывания аннотации:
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>)
маркам следующее предупреждение: "Безопасность Тип:? Неконтролируемый отлиты из класса < захвата # 4-в> к классу < расширяет Annotation>"
Спасибо за редактирование моего вопроса. Но когда я использую метод getMethods(), я могу получить все методы из аннотации, и когда я использую только один, который начинается с annoProp, я могу использовать отражение и вызывать их, не так ли? Какой тип данных должен иметь? EDIT: Спасибо, я понял, и это работает! – CSchulz
См. Редактирование в моем вопросе. Могу ли я исправить это, или я должен использовать @SuppresWarnings? – CSchulz
@ H3llGhost: Не уверен, небрежно. 'Class.cast' * может * быть вашим другом ... –