Java Annotations Processor: Überprüfen Sie, ob TypeMirror eine bestimmte Schnittstelle implementiert
Ich arbeite mit einem Java Annotations-Prozessor. Meine Anmerkung,@foo
wird verwendet, um Feldvariablen zu markieren, die zur Laufzeit in eine Datei oder aus einer Datei gelesen werden können. Ich möchte jedoch prüfen, ob der Variablentyp implementiert istSerializable
Während der Kompilierungszeit kann ich eine Warnung / einen Fehler zur Kompilierungszeit ausgeben, wenn das Feld nicht serialisierbar ist.
(Ich muss nicht wirklich überprüfen, ob das Objekt serialisierbar ist, wenn es das implementiertSerializable
Ich werde es vertrauen).
Ich habe herausgefunden, wie man die anderen Sachen macht, aber ich kann nicht herausfinden, wie man überprüft, ob das Element implementiertSerializable
. Ich kann das benutzenTypeElement#getInterfaces
Methode, aber ich kann nicht herausfinden, wie man überprüft, ob irgendwelche von diesenTypeMirror
sind die zurückgebrachten fürSerializable
.
Auch, wenn jemand etwas Gutes weißjava.lang.model
oder Java Annotations Tutorials, das wäre auch hilfreich.
Edit: Ich habe das ausprobiert ...
isSerializable = false
for(TypeMirror tm : processingEnv.getTypeUtils().directSupertypes(em.asType()))
{
if(isSerializable = "java.io.Serializable".equals(tm.toString()))
{
break;
}
}
Es funktioniert in Ordnung für String und Character, die direkt implementiert werdenSerializable
, aber für Integer, das Serializable von der Number-Superklasse erbt, funktioniert es nicht.