2010-02-07 7 views
5

Widziałem czasem obiekt typu wewnątrz <> obok deklaracji innego typu obiektu. Na przykład:W języku Java, co to znaczy, gdy po typie występują nawiasy ostrokątne (jak na liście <Foo>)?

NavigableMap<Double, Integer> colorMap = new TreeMap<Double, Integer>() 
or 
private final CopyOnWriteArrayList<EventListener> ListenerRecords = 
new CopyOnWriteArrayList<EventListener>(); 

Czy możesz dać mi prosty eksplikacji?

+0

Dziękuję wszystkim! Teraz jestem ok;) , a także dzięki edycji tytułu we właściwy sposób !! Pozdrawiam – soneangel

Odpowiedz

1

Generics, zajęcia, które napisane są z jednego lub więcej typów w lewo, aby być określone później, więc mogą być używane z każdego rodzaju. Generyczne mogą być bardzo użyteczne w przypadku kontenerów lub algorytmów, w których algorytm lub struktura danych jest niezależna od rzeczywistego typu przechowywanego lub manipulowanego.

2

Nazywa się to generics i umożliwia kompilatorowi sprawdzenie typu zawartości list itp., A także zmniejsza ilość odlewania, które musisz wykonać w kodzie.

Przydaje się również przy czytaniu kodu, ponieważ wiadomo, jaki typ obiektu można umieścić w danym przedmiocie lub jakiego typu można się tego spodziewać.

Implementacja Java nie jest tak dokładna jak C++, ponieważ Java jest dostępna tylko w czasie kompilacji.

W czasie wykonywania informacja o typie nie jest już dostępna.

2

W twoim przykładzie TreeMap klucz TreeMap ma typ Double, a wartość przywoływana przez ten klucz ma typ Integer. I jak już odpowiedział, nazywa się generycznymi. To rozszerzenie wprowadzone w java 1.5. Dzięki temu kod staje się bardziej czytelny.

3

Jak powiedzieli niektórzy inni: Twoje podejście do Java Generics. Są w Javie od wersji SDK 1.5.

Np:

new CopyOnWriteArrayList<EventListener>() 

oznacza, że ​​tworzysz nową (równoległe) ArrayList, które jest w stanie przechowywać obiekty typu EventListener. Jeśli chcesz utworzyć ArrayList starą (pre Java 1.5) sposób jak:

new ArrayList() 

wszystkie zawarte obiekty byłyby typu Object i trzeba by rzucić ich do prawdziwego typu. Zobacz także http://en.wikipedia.org/wiki/Generics_in_Java#Motivation_for_generics.

+0

Bardzo miły! Bardzo proste wytłumaczenie! – soneangel