Domanda

Dal momento che i generici vengono controllati solo durante la fase di compilazione con Java 5, possono evitare ClassCastExceptions in tutto situazioni?

È stato utile?

Soluzione

Prima di tutto, è necessario assicurarsi che il codice compilato senza avvisi unckeched. Questo è un buon indicatore. Per capire il perché, vi consiglio di dare un'occhiata alla per i medicinali generici da Effective Java .

In secondo luogo, i generici non si può proteggere dal codice come ad esempio:

public void methodOne(Integer argument)  {
     methodTwo(argument);
} 

public void methodTwo(Object argument) {
     System.out.println(((Date) argument).getTime());
}

In terzo luogo, se si è in un modo o nell'altro scherzi con classe Pale, si potrebbe ottenere strano ClassCastExceptions, come ad esempio in questa discussione discussione . E 'da capogiro per vedere

  

java.lang.ClassCastException: javax.mail.Session non può essere gettato a   javax.mail.Session

Quindi la risposta è no, non è possibile sbarazzarsi di ClassCastExceptions semplicemente correttamente utilizzando farmaci generici .

Altri suggerimenti

La garanzia "ghisa" che Java 5 generici fornisce è che non vedrete mai un ClassCastException dai calchi inseriti dal compilatore fornito che compilation prodotta nessun avviso "incontrollato".

Nella vita reale, spesso non può evitare gli avvisi incontrollati se il codice utilizza legacy librerie (non generified). Poi i calchi generati dal compilatore possono buttare ClassCastException, ed è il vostro lavoro per evitare che questo facendo in modo che i valori restituiti da codice della libreria sono ben tipizzati per le vostre dichiarazioni.

In caso contrario la situazione è invariata. Al di fuori dei farmaci generici, se si esegue il cast a un tipo di incompatibilità si otterrà un ClassCastException allo stesso modo come hai sempre fatto.

(un buon riferimento per questo ed altri generici domande è Java Generics e collezioni .)

No. Utilizzo di Java 5.0 e generici tipo non rende ClassCastException-proof.

No. farmaci generici solo di risparmiare da errori in fase di compilazione e non runtime eccezioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top