Я работаю над обработчиком аннотаций Java. Моя аннотация @foo
используется для обозначения переменных поля, которые могут быть прочитаны в файле или из файла во время выполнения. Тем не менее, я хотел бы проверить, реализует ли тип переменной Serializable
во время компиляции, поэтому, если поле не является сериализуемым, я могу дать предупреждение/ошибку во время компиляции.
(Мне не нужно проверять, действительно ли объект сериализуется, если он реализует интерфейс Serializable
, я ему доверяю).
Я выяснил, как это сделать, но я не могу понять, как проверить, реализует ли элемент Serializable
. Я могу использовать метод TypeElement#getInterfaces
, но не могу понять, как проверить, возвращен ли какой-либо из этих TypeMirror
для Serializable
.
Кроме того, если кто-нибудь знает какие-либо хорошие учебники java.lang.model
или Java Annotations, это также будет полезно.
Изменить: я пробовал это...
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, он не работает.