2011-07-21 14 views
6

Co oznacza Map<?, ?> w języku Java?
Sprawdziłem w Internecie, ale nie mogę znaleźć żadnych artykułów na ten temat.Co oznacza mapa <?, ?> w języku Java?

edit: Znalazłem to na MP3 Duration Java

+3

'Mapa' jak w _kolejce_? lub '' część, jak w _generics_? Czy spojrzałeś na javadoc? – c00kiemon5ter

+0

W porządku, ja na pewno mówię o generycznych i wieloznacznych znakach. Część "<" była ukryta w pytaniu; interpretowane jako html. Zmontowałem to pytanie. – c00kiemon5ter

+0

@ C00k - możesz chcieć ponownie edytować pytanie, '' nie wyświetla się. – Paul

Odpowiedz

3

? wskazuje zastępczy w której wartość nie jesteś zainteresowany (zamiennika):

HashMap<?, ?> foo = new HashMap<Integer, String>(); 

A ponieważ ? jest wieloznaczny, można pominąć go i nadal uzyskać ten sam wynik:

HashMap foo = new HashMap<Integer, String>(); 

Ale mogą być używane do określenia lub podziału generycznych, które będą używane. W tym przykładzie pierwszy rodzajowy musi implementować interfejs Serializable.

// would fail because HttpServletRequest does not implement Serializable 
HashMap<? extends Serializable, ?> foo = new HashMap<HttpServletRequest, String>(); 

Zawsze lepiej jest używać konkretnych klas zamiast tych symboli wieloznacznych. Powinieneś używać tylko ?, jeśli wiesz co robisz :)

+3

Typ Raw NIE jest tym samym wynikiem co symbol wieloznaczny! Ani trochę! – Affe

+0

Och, naprawdę? Tego nie wiedziałem. Jak te dwa pierwsze przypadki różnią się od siebie? – mana

+3

Dzika karta oznacza "To jest mapa, która ma w sobie pewien specyficzny rodzaj ograniczonej rzeczy, ale nie wiem, co to jest". Surowy typ jest typem surowym, nic o nim nie wiadomo, żadnych ograniczeń, może tam być cokolwiek. Kompilator nie pozwoli ci dodawać rzeczy do mapy , ale możesz umieścić wszystko, co chcesz w surowej Mapie. – Affe

10

Map<?,?> oznacza, że ​​w czasie kompilacji, nie wiem, co typ klasy klucz i wartość przedmiotu mapą będzie.

Jest to typ wieloznaczny. http://download.oracle.com/javase/tutorial/extra/generics/wildcards.html

+0

Przepraszam, nie jestem tak dobry w generycznych, ale jakie są różnice między 'Mapą ' i 'Mapą '? –

+1

'ClassName ' jest tym, co napiszesz by "zdefiniować" klasę lub interfejs. 'ClassName ' jest tym, co napiszesz, aby "użyć" klasy ogólnej w swoim programie o nieznanym (dowolnym) typie. – Kainsin

1

Od java5, Leki generyczne są dostarczane z językiem. http://download.oracle.com/javase/tutorial/java/generics/index.html

Zapis oznacza, że ​​tworzona mapa zaakceptuje obiekt klasy A jako klucz i obiekt klasy B jako wartość.

Pomoże Ci to jako programista, więc nie będziesz już rzucał obiektu do właściwej klasy. Więc przyzwyczajenie być w stanie korzystać z mapy z klawiszy innych niż A i objets innych niż B. Unikanie brzydkie odlewane i świadczących skompilować ograniczenia czasowe

1

Map<?,?> mówi, że można wykorzystać każdy obiekt na key i value na mapie.

Ale zwykle jest bardziej przydatny do wykorzystania rodzajowych tak:

Map<String, YourCustomObject> map 

Więc w tej mapie, można tylko putString jako klucz i YourCustomObject jako wartość ty.

Zobacz ten tutorial na temat leków generycznych.

0

? jest symbolem wieloznacznym. Słońce ... er ... Oracle ma ładny tutorial na temat generycznych here. Istnieje osobna sekcja na symbole wieloznaczne.

Prawdopodobnie dostaniesz lepszą odpowiedź, jeśli umieścisz więcej kontekstu na swoim pytaniu, na przykład gdzie zobaczyłeś Map<?, ?>.