Nella classe generica Class<T>
il metodo getConstructors()
ha un tipo di ritorno con parametro di tipo generico sconosciuto anziché T
. La ragione di ciò è spiegata nel javadoc.Tipo generico in getConstructors() nella classe
notare che, mentre questo metodo restituisce un array di oggetti
Constructor<T>
(vale a dire una serie di costruttori da questa classe), il tipo di ritorno di questo metodo èConstructor<?>[]
e nonConstructor<T>[]
come ci si potrebbe aspettare. Questo tipo di ritorno meno informativo è necessario poiché dopo essere stato restituito da questo metodo, l'array potrebbe essere modificato per contenere oggetti Constructor per classi diverse, il che violerebbe le garanzie del tipo diConstructor<T>[]
.
Un mio collega e io abbiamo cercato di capire questa spiegazione. Nella nostra comprensione stanno sostanzialmente dicendo che è di tipo generico sconosciuto, perché alcuni chiamanti potrebbero mettere altri oggetti Constructor
in quell'array. Abbiamo capito bene? E se è così, perché qualcuno dovrebbe progettare un'API in questo modo. Non sarebbe meglio usare il tipo specifico e fidarsi del programmatore per usare correttamente l'array? A noi sembra un po 'come "Stiamo facendo un'API peggiore perché il programmatore che lo utilizza potrebbe provare qualcosa di stupido". Dove giace il nostro errore?
Buona domanda. Se questo è davvero il fondamento logico, non è così forte. Si può discutere di questo per ogni collezione di oggetti. Spetta al chiamante elaborare il risultato, non il chiamato per fornire un buon tipo di reso. –
Vedere la discussione in fondo a [questa risposta] (http://stackoverflow.com/a/2914636/829571) – assylias
grazie @assylias, perse quello mentre cercava una risposta.La mia domanda rimane: non è possibile usare 'Costruttore []' e affidarsi al chiamante per fare la cosa giusta? E se è così, perché deciderlo contro? –