Sicuramente si dovrebbe leggere questo tutorial su generici Java: http://docs.oracle.com/javase/tutorial/java/generics/
In poche parole:
Molte classi Java e tipi (chiamati classi generiche o tipi generici), in genere raccolte, si chiamano così typ e parametri, come E
in ArrayList<E>
(E
è solo un nome scelto arbitrario, altre classi il nome come T
o qualsiasi altra cosa):
public class ArrayList<E> extends ... {
public E get(int index) { ... }
public boolean add(E element) { ... }
// other methods...
}
Ora, quando si crea un'istanza di tale classe, si definisce una concreta valore del parametro tipo, ad esempio String
(E
di solito può essere valutata a qualsiasi tipo che si desidera):
ArrayList<String> stringList = new ArrayList<String>();
da ora in poi, tutti i E
s vengono "sostituiti" con String
per il 01 Variabile, quindi è possibile aggiungere solo stringhe e ottenere solo stringhe da esso. I controlli del compilatore per te, che non si erroneamente aggiunto un oggetto di un altro tipo:
stringList.add(Integer.valueOf(1));
// compile error - cannot add Integer to ArrayList of Strings
Tuttavia, poiché i generici sono state aggiunte a Java 5, è ancora possibile scrivere codice senza di loro per la compatibilità all'indietro . Così puoi scrivere:
ArrayList list = new ArrayList();
Ma si perdono tutti i vantaggi del controllo di tipo. E
s nelle firme dei metodi diventano semplicemente Object
s.
list.add(Integer.valueOf(42)); // adding an Integer
list.add("aaa"); // adding a String
Object something = list.get(0); // unknown type of returned object, need to cast
Integer i0 = (Integer) something; // this unsafe cast works...
Integer i1 = (Integer) list.get(1); // but this fails with a ClassCastException
// because you cannot cast a String to Integer
Il fatto che l'utilizzo di un tipo di grezzo (che è un tipo generico con i suoi parametri di tipo omesso) è sicuro, è la ragione per l'avvertimento che hai. Invece di solo ArrayList
, usa ArrayList<String>
o ArrayList<Integer>
o qualunque sia il tipo di tuo items
.
Wow grazie a questo! Spiegazione molto chiara @Natix. +1 – KarenAnne
Can fornisci la soluzione esatta per la domanda? – Satish