2013-03-28 12 views
10

W Javie i Androidzie kończę używanie ArrayList<String> dla listy dostawców, ponieważ uważam, że są łatwiejsze w użyciu niż standardowe String[]. Moje prawdziwe pytania są jednak następujące:

Jak nazywa się część <String> części ?
Jak mogę utworzyć klasy i użyć <> [modyfikator]? (Nie wiem, jak to się nazywa, więc na razie jest to modyfikator).

Dzięki!Podaj typ dla ArrayList

+8

Google java generics – david99world

+1

To się nazywa parametr _type_. –

+0

Typ obiektu w <> –

Odpowiedz

7

Tutaj wil może zobaczyć wyraźniej:

ArrayList<TypeOfYourClass> 

Można utworzyć klasę Person i przekazać je do ArrayList jak tego fragmentu jest pokazane:

ArrayList<Person> listOfPersons = new ArrayList<Person>(); 
+0

Tak samo jak możesz stworzyć tablicę typu 'MyClass []', możesz także utworzyć 'ArrayList ', uzyskując funkcjonalność ArrayList przez Array? – Adam

+0

Istnieje kilka funkcji w tablicy ArrayList, która jest klasą kolekcji, której nie można znaleźć w typie tablicy. Na przykład możesz znaleźć metodę "dodaj", dzięki której możesz dynamicznie dodawać obiekty do swojej listy, możesz znaleźć metodę remove, size(), oprócz tego, że pamięci tablic są przydzielane w momencie wprowadzenia i ich rozmiar, w związku z tym jest ustalana od początku, jeśli odcyfrujesz tablicę osób o rozmiarze 20, nie możesz dodać więcej niż 20 osób do tablicy. Kolekcje do. – javadev

5

Część <String> jest rodzajem argumentu typu . Zapewnia on „wartość” sortuje dla parametru typu która jest E w ArrayList<E> ... w taki sam sposób, jeśli masz metodę:

public void foo(int x) 

i nazwać ją:

foo(5) 

Parametr to x, a podanym argumentem jest 5. Parametry typu i argumenty typu są w zasadzie odpowiednikami generycznymi.

Zobacz section 4.5 of the JLS (i powiązań z nim) na trochę więcej szczegółów - i Java Generics FAQ uzyskać więcej informacji na temat leków generycznych niż można chcieć czytać :)

1

Sprawdź składnię generycznych generics dla Java. To postawi cię prosto (no cóż, wiele osób uważa, że ​​podejście Java jest gorsze niż C++ i C#).

+1

Musiałeś, prawda? –

2

supose chcesz ArrayList do być wypełnione tylko za pomocą Strings. Jeśli piszesz:

ArrayList<String> list = new ArrayList<String>(); 
    list.add("A"); 
    list.add("B"); 
    list.add("C"); 

Możesz mieć pewność, niż wtedy, gdy ktoś próbuje wypełnić ArrayList przy wew zostanie on wykryty w complile czasie.

Tak więc, leki generyczne są używane w sytuacjach, w których wymagane są takie ograniczenia.

1

Jest to parametr typu. W Javie musisz podać jedną z nich, gdy klasa jest napisana jako ogólna.

Oto przykład z ogólnej definicji klasy

private class GNode<T> 
{ 
    private T data; 
    private GNode<T> next; 

    public GNode(T data) 
    { 
     this.data = data; 
     this.next = null; 
    } 
} 

można teraz tworzyć węzły dowolnego typu, które przechodzą w. T działa jako parametr typu rodzajowego dla definicji klasy.Jeśli chcesz utworzyć węzeł o liczbach całkowitych, po prostu wykonaj:

GNode<Integer> myNode = new GNode<Integer>(); 

Należy zauważyć, że parametr typu musi być obiektem. Działa to poprzez auto-boxing i automatyczne rozpakowywanie Javy. Oznacza to, że nie można używać typów pierwotnych java i zamiast tego należy użyć odpowiednich klas.

Boolean instead of bool 
Integer instead of int 
Double instead of double 
etc... 

Ponadto, jeśli nie przekazujesz parametru typu, jestem pewien, że Twój kod nadal będzie się kompilować. Ale to nie zadziała.