У меня есть пакет Java, который содержит аннотации, используемые внешними клиентами. Пакет появился до Java 8, поэтому исторически эти аннотации имеют цели ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE
. Теперь пакет требует как минимум Java 8 версию. Семантически аннотации в пакете применимы к типам, поэтому, например, когда метод аннотирован, аннотация эффективно применяется к типу возврата метода. Теперь клиенты хотят также аннотировать аргументы типа c (например, List<@MyAnnotation String>
). Поскольку мы опустили поддержку Java 7 и ниже, кажется вполне естественным установить цель аннотации на ElementType.TYPE_USE
и, чтобы уменьшить двусмысленность, удалить существующие цели.
Вот вопрос: есть ли риски совместимости для существующих клиентов при замене ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE
целей на TYPE_USE
? Возможно ли, что существующий код перестанет компилироваться? Как насчет двоичной совместимости? Может ли это вызвать какие-либо проблемы во время выполнения, если файлы классов, скомпилированные до изменения, используются вместе с более новым пакетом аннотаций во время выполнения?
Политика хранения аннотаций CLASS
, если это имеет значение.