Sto utilizzando la riflessione per verificare se un'annotazione associata a una proprietà di una classe è di un tipo specifico. Corrente che sto facendo:Verifica se un'annotazione è di un tipo specifico
if("javax.validation.Valid".equals(annotation.annotationType().getName())) {
...
}
Il che mi sembra un po 'kludgey perché si basa su una stringa che è una classe-nome completo. Se lo spazio dei nomi cambia in futuro, ciò potrebbe causare errori impercettibili.
vorrei fare:
if(Class.forName(annotation.annotationType().getName()).isInstance(
new javax.validation.Valid()
)) {
...
}
Ma javax.validation.Valid
è una classe astratta e non può essere istanziata. C'è un modo per simulare lo instanceof
(o fondamentalmente usare isInstance
) contro un'interfaccia o una classe astratta?
È una specie di eccessivo poiché è illegale estendere un'annotazione in ogni caso. Non so se ci sia una penalità prestazionale significativa rispetto ai normali eguali. – Affe
@Affe Ho visto la tua soluzione - non sapevo che potevi semplicemente fare un '.equals' o un' == 'su' .class'! Grazie per quello. Ho avuto l'impressione che l'uso di '.class' confronti semplicemente gli oggetti' Class' e non i tipi reali. –
La classe è effettivamente un singleton. È garantito che esiste una sola istanza dell'oggetto Class per un determinato Type per classloader, quindi è possibile confrontarli in questo modo in java. – Affe