PDA

View Full Version : domanda su Cast Java


nuovoUtente86
06-06-2007, 19:20
Castizzando una variabile il compilatore non da nessun avviso ma se ci sono problemi si solleva logicamente la ClassCastException.
Quando però vado a castizzare un Object proveniente dal metodo readObject() di uno stream in compilazione mi appare il seguente avviso:

Note: java uses unchecked or unsafe operations
Note: Recompile with -Xlint:unchecked for details.
compilando
warning: [unchecked] unchecked cast
found: java.lang.Object
required:...........................ecc

Come mai castizzando da uno stream si ha l' avviso mentre normalmente no?

andbin
06-06-2007, 21:16
Castizzando una variabile il compilatore non da nessun avviso ma se ci sono problemi si solleva logicamente la ClassCastException.
Quando però vado a castizzare un Object proveniente dal metodo readObject() di uno stream in compilazione mi appare il seguente avviso:

Note: java uses unchecked or unsafe operations
Note: Recompile with -Xlint:unchecked for details.
compilando
warning: [unchecked] unchecked cast
found: java.lang.Object
required:...........................ecc

Come mai castizzando da uno stream si ha l' avviso mentre normalmente no?Succede perché sicuramente stai usando i generics e stai cercando di fare un cast a un tipo come ABC<XYZ>

Il warning in questo caso è inevitabile (salvo sopprimerlo con una apposita annotazione) perché il cast è tale per cui non può essere controllato a runtime (ricordati che i generics sono implementati tramite "erasure" e quindi a runtime non si può stabilire se l'oggetto è realmente ABC<XYZ>).

nuovoUtente86
07-06-2007, 01:24
nell' ultimo caso è successo proprio con i generici,però capita anche utilizzando String o altri Oggetti.
ecco lo fa anche con questa porzione di codice HashMap<String,char[]>mappa=(HashMap<String,char[]>)out.readObject();
si utilizzano sempre i generici ma non a modo dei template del C.

nuovoUtente86
08-06-2007, 14:03
cosa vuol dire "erasure" ?

andbin
08-06-2007, 15:30
cosa vuol dire "erasure" ?La "erasure" è il nocciolo, per così dire, dei generics. È il processo per cui il compilatore rimuove tutte le informazioni relative ai generics nel bytecode generato.

http://java.sun.com/docs/books/tutorial/java/generics/erasure.html
http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf