Каково обоснование аннотаций, реализующих java.lang.reflect.Proxy? - PullRequest
2 голосов
/ 28 мая 2011

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

Существуют ли какие-либо преимущества или лучшие гарантии того, как аннотации будут работать для пользователя аннотации / класса?Или просто какой-то класс JDK был повторно использован для реализации аннотаций, потому что это было «удобно»?

См. Также этот пост в блоге IKVM .

Ответы [ 2 ]

3 голосов
/ 28 мая 2011

Аннотации являются интерфейсами. В то же время они должны иметь как минимум некоторые свойства, которые должны быть прочитаны обработчиками аннотаций. Самый простой способ достичь этой двойственности - динамически проксировать аннотации во время выполнения (или, может быть, во время загрузки классов, не уверен).

2 голосов
/ 29 мая 2011

В качестве альтернативы можно было бы скомпилировать (или как-то еще сгенерировать) новый класс реализации для каждого типа аннотации или заново изобрести другой прокси-подобный механизм.

Поскольку реализация довольно проста (и не очень специфична для каждого типа аннотации), использование объектов Proxy вместе с общей реализацией InvocationHandler является довольно хорошей идеей.

...