У меня есть интерфейс, содержащего метод принимающего объект типа java.lang.ClassУнифицированное использование javax.lang.model.type.TypeMirror и java.lang.Class
public interface TypeReviewer {
public int evaluate(Class<?> type);
...
}
Теперь я хочу, чтобы поддержать использование объектов этого интерфейса в обработчике аннотаций. Но, так как некоторые классы не могли быть составлены во время обработки аннотаций, мне кажется, что мне нужно добавить метод
public int evaluate(TypeMirror type)
к интерфейсу. (Возможно, мне придется добавить параметр типа javax.lang.model.util.Types, но это не имеет значения для предстоящего вопроса)
Для меня нет смысла добавлять этот метод в интерфейс как он должен вычислять точно такое же значение для javax.lang.model.type.TypeMirror, а TypeMirror в основном представляет класс. Это также возможный пункт отказа в качестве программиста, реализация которого в этом классе может привести к различным результатам в этих методах точно для одного и того же типа.
Это приводит меня к моему вопросу: Что я могу сделать, чтобы избежать такой избыточной реализации для обработки аннотаций и любого другого поля метапрограмм?
Как вы используете этот класс в своем обработчике аннотаций? –
Я ищу TypeElements с определенной аннотацией, а затем я использую метод asType() аннотированного типа для получения объекта TypeMirror. Реализация TypeReviewer меняется, поскольку я создаю эти объекты через некоторые отражения. – narranoid
Итак, интерфейс предназначен исключительно для использования в обработчике аннотаций? И пытаетесь ли вы выполнить требование, чтобы тип, который представляет TypeMirror, должен быть частью контракта с интерфейсом? –