Проверка отсутствия суперкласса в процессоре аннотации

При получении TypeElement в процессоре аннотаций вы можете запросить его суперкласс (или, более конкретно, TypeMirror его ) с помощью метода getSuperClass () . Согласно JavaDoc , тип, который не является явным, расширяет что-либо (другими словами, Object является суперклассом) или интерфейс возвращает NoType с NONE как TypeKind .

Не обращая внимания на тот факт, что вся штука API модели / зеркала, кажется, изо всех сил сбивает вас с толку при каждой возможности на мгновение, как бы я мог надежно это проверить? Вот некоторые фрагменты кода:

//Cast is safe since TypeKind is checked before this
final TypeElement el = (TypeElement)annotatedElement;
...
final TypeMirror parent = el.getSuperclass();
//Checking whether "nothing" is extended
if(parent.getKind().equals(TypeKind.NONE) && parent instanceof NoType) {
    ...         
}

Это правильный способ? Это кажется довольно неуклюжим. Поскольку метод равно класса TypeMirror не должен использоваться для проверки семантического равенства, мне интересно, безопасно ли его использовать для TypeKind . Мое чутье говорит «да», так как это перечисление, но тогда я сомневаюсь в этом instanceof .

Есть ли лучший способ сделать это? Весь пакет javax.lang.model и его дочерние элементы имеют перекрестные ссылки по всему магазину, и мне никогда не ясно, какой метод для чего-то лучше всего подходит.Есть полезные служебные методы для некоторых вещей, а есть, казалось бы, простые задачи, требующие сомнительной акробатики, подобной описанной выше.

6
задан G_H 12 October 2011 в 09:48
поделиться