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 diesenTypeMirrorsind 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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage