2010-10-14 10 views
16

Na przykład, zamiast robićKiedy tworzysz ArrayList bez określania typu obiektu, czy tworzy go automatycznie po dodaniu pierwszego obiektu?

ArrayList<ClassName> variableName; 

zrobić

ArrayList variableName; 

potem dodać obiekt typu "ClassName"

variableName.add(objectName); 

będzie automatycznie ustawić typ swoje tablica jako

?

+2

Co stanie się, jeśli spróbujesz? –

+0

Zobacz http://download.oracle.com/javase/tutorial/java/generics/generics.html i http://download.oracle.com/javase/tutorial/java/generics/erasure.html – helpermethod

Odpowiedz

34

Nie. Generics są przeznaczone wyłącznie do kompilacji. Po prostu tracisz korzyść z tego czeku. W czasie wykonywania wszystkich informacji generic zostanie skasowana

Innymi słowy,

ArrayList<Type> 

przy starcie jest po prostu ArrayList. Zaletą robienia tego za pomocą tylko listy jest fakt, że podczas pisania kodu kompilator sprawdzi, czy nie umieszczasz niczego nieodpowiedniego na liście.

9

Jeśli nie zostanie podana, będzie to takie samo, jak w przypadku określenia obiektu ArrayList <Obiekt>, co oznacza, że ​​dowolny typ obiektu może zostać dodany do tablicy ArrayList. Kontrole typu, które są wykonywane podczas określania klasy, zdarzają się w czasie kompilacji, a nie w środowisku wykonawczym, więc nie jest możliwe, aby rzeczy działały tak, jak proponujesz (mając bardziej specyficzną klasę określoną w czasie wykonywania).

+1

Powiedziałbym, że semantycznie ArrayList oznacza "ta lista zawiera obiekty potencjalnie dowolnego typu", podczas gdy ArrayList oznacza "jest to albo starszy kod, albo nie zadałem sobie trudu, aby określić typ elementów listy do kompilatora". – ninjalj

+0

ninjalj: Więc co nazwałbyś ArrayList ? Nazwałbym to, że "ta lista zawiera obiekty potencjalnie dowolnego typu", podczas gdy ArrayList będzie "to zawiera obiekty" .. – bwawok

7

Prawdziwy typ to naprawdę ArrayList. Typ ArrayList<ClassName> istnieje tylko dla kompilatora (nazywa się to wymazaniem), a jego celem jest zapewnienie bezpieczeństwa typu na poziomie kompilatora. Ale na poziomie bajtowym nie masz takiej wiedzy o typach ogólnych.

Powiązane problemy