Аннотация Java возвращает загадочные имена классов

System.Web.HttpUtility.UrlEncode(yourString) добьется цели.

16
задан bdorry 1 September 2009 в 17:23
поделиться

3 ответа

Учитывая аннотацию a, вам нужно вызвать annotationType (), а не getClass (), чтобы определить тип аннотации. Объект Annotation - это просто прокси, представляющий этот экземпляр аннотации в этом классе.

Object o = ...;
Class c = o.getClass();
Annotation[] as = c.getAnnotations();
for (Annotation a : as) {
   // prints out the proxy class name
   System.out.println(a.getClass().getName());
   // prints out the name of the actual annotation
   System.out.println(a.annotationType().getName());
}
24
ответ дан 30 November 2019 в 21:29
поделиться

Когда вы добавляете аннотации в исходный код, Java фактически создает набор интерфейсов и классов «под капотом», чтобы вы (или ваши инструменты) могли задавать программе вопросы об аннотациях, используя ограничения. Аннотации методов создают «динамические прокси», и, соответственно, Java создает для вас классы, вероятно, с именем Proxy.

Если вам это интересно, прочтите java.lang.reflect.InvocationHandler и его подтип AnnotationInvocationHandler

That как уже было сказано, вам не нужно беспокоиться о том, что на самом деле генерирует Java. Я подозреваю, что вы неправильно используете отражение для проверки ваших аннотаций из программы Java.

1
ответ дан 30 November 2019 в 21:29
поделиться

также .. не забудьте установить это:

@Retention(RetentionPolicy.RUNTIME)

в аннотации, чтобы она существовала за пределами компиляции.

1
ответ дан 30 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: