No, i metodi che ricerca ci si aspetta parametri esatti. Pertanto, quando si cerca un costruttore, un metodo o un campo utilizzando i metodi di ricerca/ricerca dell'API di riflessione, l'API utilizza equals()
per trovare le corrispondenze.
Se è necessaria la stessa logica utilizzata dal compilatore Java, sarà necessario utilizzare un framework come FEST Reflect o commons beanutils. O è necessario chiamare getConstructors()
e scrivere il proprio codice di filtro.
A prima vista, questo sembra stupido: se il compilatore Java può farlo, perché non può l'API di Reflection? Ci sono due ragioni: in primo luogo, il runtime Java non ha bisogno di cercare quale metodo chiamare perché il compilatore ha già selezionato il metodo corretto.
Il secondo motivo è che l'API di Reflection è sempre stata "la seconda migliore". Può fare tutto ma l'obiettivo non è mai stato renderlo veramente facile/amichevole da usare (almeno, questo è quello che penso ogni volta che lo uso :-)
fonte
2012-11-22 08:51:58
Cosa succede ad usare 'B.class.getConstructors()' , trova quelli che prendono esattamente un argomento e controlla se 'A.class'' èAssignableFrom' questo? –
è il pubblico di costruttore di B? –
arne.b Questo è un modo per farlo ma ho pensato che potesse essere effettivamente più semplice. Nandkumar Sì, è pubblico. –