Quando si ottiene un TypeElement
in un processore di annotazione, è possibile richiedere la sua super classe (o in particolare, lo TypeMirror
di esso) utilizzando il metodo getSuperClass()
. According to the JavaDoc, un tipo che non estende in modo esplicito nulla (in altre parole, Object
è la super classe) o che è un'interfaccia restituirà un NoType
con NONE
come TypeKind
.Controllo dell'assenza di super classe nel processore di annotazione
Ignorando il fatto che l'intera API modello/mirror sembra andare fuori strada per confondervi in ogni occasione per un momento, come potrei verificarlo in modo affidabile? Ecco alcuni estratti di codice:
//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) {
...
}
È questo il modo corretto? Sembra piuttosto goffo. Dal momento che lo equals
method of TypeMirror non deve essere utilizzato per i controlli di uguaglianza semantica, mi chiedo se è sicuro utilizzarlo per TypeKind
. Il mio istinto dice sì dato che è un enume, ma poi ho dei dubbi su quello instanceof
.
C'è un modo migliore per farlo? L'intero pacchetto javax.lang.model ei suoi figli hanno riferimenti incrociati in tutto il negozio e non mi è mai chiaro quale sia il metodo migliore per qualcosa. Esistono utili metodi di utilità per alcune cose, e poi ci sono compiti apparentemente semplici che richiedono acrobazie dubbi come sopra.