Процессор аннотаций Java: проверьте, реализует ли TypeMirror определенный интерфейс
Я работаю с процессором аннотаций Java. Моя аннотация,@foo
используется для пометки переменных поля, которые могут быть прочитаны в файл или из файла во время выполнения. Тем не менее, я хотел бы проверить, реализует ли тип переменнойSerializable
во время компиляции, так что если поле не сериализуемо, я могу выдать предупреждение / ошибку во время компиляции.
(Мне не нужно на самом деле проверять, сериализуем ли объект, если он реализуетSerializable
Интерфейс я буду доверять).
Я выяснил, как делать другие вещи, но я не могу понять, как проверить, реализует ли элементSerializable
, Я могу использоватьTypeElement#getInterfaces
метод, но я не могу понять, как проверить, если какой-либо из этихTypeMirror
возвращается один дляSerializable
.
Кроме того, если кто-то знает что-то хорошееjava.lang.model
или учебники по аннотациям Java, которые также будут полезны.
Редактировать: я пробовал это ...
isSerializable = false
for(TypeMirror tm : processingEnv.getTypeUtils().directSupertypes(em.asType()))
{
if(isSerializable = "java.io.Serializable".equals(tm.toString()))
{
break;
}
}
Это работает хорошо для String и Character, которые непосредственно реализуютSerializable
, но для Integer, который наследует Serializable от суперкласса Number, он не работает.