2013-09-10 15 views
6

Chcę, aby przechowywać zestaw int/String wartości, ale int s niekoniecznie są przyrostowe, czyli dane mogą być:Dlaczego nie mogę zainicjować mapy <int, String>?

<1, "first">, <3, "second">, <9, "third">. 

Więc Próbuję utworzyć C# odpowiednik Dictionary<int, string> ale to po prostu nie do kompilacji, mówiąc „błąd składni na symboliczną«int», Wymiary oczekiwane po tym dowód” na linii:

private Map<int, String> courses; 

Może ktoś Proszę mi powiedzieć, dlaczego tak jest? I dobrą alternatywą do stworzenia obiektu jako symbolu zastępczego dla int i String, a następnie użycia tablicy do ich przechowywania?

+0

Jako typ klucza należy używać liczby całkowitej. Może zepsuć się do int, więc jest równie użyteczny. –

+2

Powiązane: [Dlaczego typy ogólne nie obsługują typów pierwotnych?] (Http://stackoverflow.com/questions/2721546/why-dont-generics-support-primitive-types) –

Odpowiedz

22

Nie można używać typów pierwotnych jako typów ogólnych.

Zastosowanie

private Map<Integer, String> courses; 

Zobacz więcej ograniczeń Generics here.

Wkład firmy Dev: JLS specifies, że tylko typy odniesienia (i symbole wieloznaczne) mogą być używane jako argumenty typu ogólnego.

+1

Co do tego, dlaczego [specyfikacja języka Java ] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.5.1) określa, że ​​tylko argument "ReferenceType" może być używany jako argument typu. – Dev

+0

@Dev Dzięki, porzuciłem szukanie: p –

+2

Jeśli nie chcesz, aby narzut kluczowych wartości bokserskich był obiektami "Integer", możesz użyć rozwiązania innej firmy. Biblioteka [Trove] (http://trove.starlight-systems.com/) ma [TIntObjectHashMap] (http://trove4j.sourceforge.net/javadocs/gnu/trove/map/hash/TIntObjectHashMap.html) i Androida ma [SparseArray] (http://developer.android.com/reference/android/util/SparseArray.html) (ten ostatni jest przydatny tylko w projektach Android). Jednak te mapy stron trzecich nie implementują interfejsu 'Map' z frameworku kolekcji Java, ponieważ klucze nie są obiektami. –

Powiązane problemy