pewno powinien przeczytać ten poradnik na temat leków generycznych Java: http://docs.oracle.com/javase/tutorial/java/generics/
W skrócie:
wielu klas Java i typy (nazywane ogólne klasy lub typy ogólne), zazwyczaj kolekcje, mają tak zwaną Parametry e, takie jak E
w ArrayList<E>
(E
to tylko arbitralne wybrana nazwa, inne klasy nazwać jako T
lub cokolwiek):
public class ArrayList<E> extends ... {
public E get(int index) { ... }
public boolean add(E element) { ... }
// other methods...
}
Teraz, kiedy utworzyć instancję tej klasy, można zdefiniować beton wartość parametru typu, na przykład String
(E
można zazwyczaj ocenia się niezależnie od typu chcesz):
ArrayList<String> stringList = new ArrayList<String>();
od teraz, wszystkie E
s są „zastąpiony” przez String
do stringList
Zmienna, dzięki czemu można dodać do niej tylko napisy i pobrać z niej tylko napisy. Kontrole kompilatora dla ciebie, że nie przez pomyłkę dodać obiekt innego typu:
stringList.add(Integer.valueOf(1));
// compile error - cannot add Integer to ArrayList of Strings
Jednakże, ponieważ rodzajowych zostały dodane do Java 5, nadal jest możliwe napisanie kodu bez nich dla wstecznej kompatybilności . Możesz więc napisać:
ArrayList list = new ArrayList();
Ale tracisz wszystkie świadczenia sprawdzające typ. E
s podpisy metody stają się po prostu 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
Fakt, że przy użyciu surowy typ (czyli ogólny typ z jego parametrów typu pominąć) jest niebezpieczne, jest powodem ostrzeżenia co masz. Zamiast tylko ArrayList
, użyj ArrayList<String>
lub ArrayList<Integer>
lub dowolnego innego typu Twojego items
.
Wow, dzięki temu! Bardzo jasne wyjaśnienie @Natix +1 – KarenAnne
Can podajesz dokładne rozwiązanie zadanego pytania? – Satish