2014-05-06 5 views
13

Il Java Guidelines for Wildcard Use dice:Un metodo deve restituire la Classe o la Classe <?>?

Utilizzo di un jolly come un tipo di ritorno dovrebbe essere evitato perché costringe i programmatori utilizzando il codice a che fare con i caratteri jolly.

Il metodo ObjectgetClass restituisce un Class<?>. I vari metodi in Class accettano uno Class<?> e se si passa in un Class il compilatore restituisce un avviso non controllato. Questo mi porta a pensare che sia sempre preferibile usare Class<?>.

Se ho un metodo che restituisce un Class e non so come verrà utilizzato quell'oggetto, quale tipo dovrei restituire Class o Class<?>? Perché? Ci sono scenari in cui potrei voler semplicemente restituire Class?

+3

@CPerkins, come ho capito la citazione che hai fornito, stanno parlando dei quattro punti elenco sopra. Continua a dare una "linea guida" per i tipi di ritorno nella citazione che ho fornito nella mia domanda. Non è solo getClass, ma gli avvertimenti non controllati quando si usano i metodi di classe che ha messo in discussione questo. –

risposta

3

L'utilizzo di MyType<?> è sempre preferibile all'utilizzo di MyType (che si estende a Class). Le linee guida prendono come un dato che il nuovo codice non utilizzerà tipi non elaborati, che sono supportati solo per la compatibilità all'indietro. Non stanno suggerendo di abbandonare i generici quando ? è il meglio che puoi fare.

Utilizzando il parametro jolly, le garanzie di sicurezza di tipo generico in fase di compilazione sono ancora valide. Queste garanzie esistono solo nel assenza di cast e tipi grezzi.

3

Se si desidera restituire un tipo generico, l'utilizzo di un carattere jolly è sicuramente preferibile all'utilizzo di un tipo non elaborato, se si inizia a utilizzare i tipi non elaborati nel codice in modo da disattivare tutti gli altri controlli di sicurezza del tipo che si otterrebbero dall'uso corretto dei farmaci generici.

La linea guida dice wildcard dovrebbero essere evitati, non che devono non possono essere utilizzati. È necessario utilizzare il tipo più specifico che ha senso in un determinato scenario, che può essere un'istanza concreta dei parametri del tipo, un carattere jolly limitato extends o super o un carattere jolly senza limite, ma ognuno di questi è una scelta migliore di un tipo non elaborato .

Problemi correlati