Tutti e tre sono perfettamente legali, poiché non esiste una differenza di runtime effettiva tra uno Stack
e uno Stack<Integer>
, ma tutti e tre comporteranno gli avvisi del compilatore.
Stack<Integer> s = new Stack()
Questo si tradurrà in un avvertimento "conversione incontrollato", perché non è sicura, in generale, per convertire un tipo grezzo a un tipo parametrico. Tuttavia, è perfettamente sicuro farlo in questo caso: la spinta dei valori Integer
non causerà alcun errore; spingendo valori non Integer
causerà un errore di tipo.
Stack s = new Stack<Integer>()
Questa è una conversione legale di un tipo parametrico a un tipo grezzo. Sarai in grado di spingere il valore di qualsiasi tipo. Tuttavia, qualsiasi operazione di questo tipo genererà un avviso di "chiamata non verificata".
Stack s = new Stack()
Ancora, questo è legale, senza conversione implicita. Sarai in grado di spingere il valore di qualsiasi tipo. Tuttavia, qualsiasi operazione di questo tipo genererà un avviso di "chiamata non verificata".
È inoltre possibile ricevere un avviso di "tipo non elaborato" ogni volta che si fa riferimento al tipo Stack
.
fonte
2009-07-30 21:07:42
Non capisco - vuoi avere uno stack in cui puoi spingere altre cose poi gli interi (es. Interi e doppi) o vuoi usare lo stack solo con un tipo (intero) e lasciare che il compilatore Aiutarti? –
No Voglio uno stack con un tipo e voglio sapere cosa succede se eseguo i compiti . – xdevel2000