2013-09-10 59 views
6

Tôi muốn để lưu trữ một tập hợp các int/String giá trị, nhưng int s không nhất thiết phải gia tăng, có nghĩa là các dữ liệu có thể là:Tại sao tôi không thể khởi tạo Bản đồ <int, String>?

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

Vì vậy, tôi đang cố gắng để tạo ra các C# tương đương với một Dictionary<int, string> nhưng nó chỉ thất bại trong việc biên dịch, nói rằng "lỗi cú pháp được tấm vé về 'int', Kích thước mong đợi sau khi dấu hiệu này" trên dòng:

private Map<int, String> courses; 

Bất cứ ai có xin vui lòng cho tôi biết tại sao điều này là gì? Và một lựa chọn tốt để tạo đối tượng làm trình giữ chỗ cho intString, sau đó sử dụng một mảng để lưu trữ chúng?

+0

Sử dụng số nguyên làm loại khóa. Nó có thể phân rã thành một int để nó cũng hữu ích. –

+2

Liên quan: [Tại sao không Generics hỗ trợ các kiểu nguyên thủy?] (Http://stackoverflow.com/questions/2721546/why-dont-generics-support-primitive-types) –

Trả lời

22

Bạn không thể sử dụng các loại nguyên thủy làm đối số loại chung.

Sử dụng

private Map<Integer, String> courses; 

Xem thêm các hạn chế đối với Generics here.

Đóng góp của Dev: JLS specifies chỉ có thể sử dụng loại tham chiếu (và ký tự đại diện) làm đối số loại chung.

+1

Vì lý do tại sao, [Đặc tả ngôn ngữ Java ] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.5.1) xác định rằng chỉ 'Loại tham chiếu' có thể được sử dụng làm đối số kiểu. – Dev

+0

@Dev Cảm ơn, đã từ bỏ việc tìm kiếm nó: p –

+2

Nếu bạn không muốn các giá trị chính của boxing là các đối tượng 'Integer', thì bạn có thể sử dụng giải pháp của bên thứ ba. Thư viện [Trove] (http://trove.starlight-systems.com/) có [TIntObjectHashMap] (http://trove4j.sourceforge.net/javadocs/gnu/trove/map/hash/TIntObjectHashMap.html) và Android có [SparseArray] (http://developer.android.com/reference/android/util/SparseArray.html) (sau này chỉ hữu ích cho các dự án Android). Tuy nhiên, các bản đồ của bên thứ ba này không thực hiện giao diện 'Map' từ khung bộ sưu tập Java, vì các khóa không phải là các đối tượng. –