Câu trả lời:
Bạn không thể sử dụng các kiểu nguyên thủy làm đối số chung trong Java. Sử dụng thay thế:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Với auto-boxing / unboxing, có rất ít sự khác biệt trong mã. Tự động đấm bốc có nghĩa là bạn có thể viết:
myMap.put("foo", 3);
thay vì:
myMap.put("foo", new Integer(3));
Tự động đấm bốc có nghĩa là phiên bản đầu tiên được chuyển đổi hoàn toàn sang phiên bản thứ hai. Tự động hủy hộp có nghĩa là bạn có thể viết:
int i = myMap.get("foo");
thay vì:
int i = myMap.get("foo").intValue();
Cuộc gọi ngầm intValue()
có nghĩa là nếu không tìm thấy khóa, nó sẽ tạo ra một NullPointerException
ví dụ:
int i = myMap.get("bar"); // NullPointerException
Lý do là loại tẩy xóa . Không giống như, giả sử, trong các loại chung C # không được giữ lại trong thời gian chạy. Chúng chỉ là "đường cú pháp" để đúc rõ ràng để cứu bạn làm điều này:
Integer i = (Integer)myMap.get("foo");
Để cho bạn một ví dụ, mã này là hoàn toàn hợp pháp:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Map<Integer, String> map2 = (Map<Integer, String>)myMap;
map2.put(3, "foo");
GNU Trove hỗ trợ điều này nhưng không sử dụng thuốc generic. http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html
Bạn không thể sử dụng các loại nguyên thủy trong HashMap
. int
hoặc double
không làm việc Bạn phải sử dụng loại kèm theo của nó. Ví dụ
Map<String,Integer> m = new HashMap<String,Integer>();
Bây giờ cả hai đều là đối tượng, vì vậy điều này sẽ làm việc.
int là một kiểu nguyên thủy, bạn có thể đọc nghĩa của kiểu nguyên thủy trong java ở đây và Map là một giao diện có các đối tượng làm đầu vào:
public interface Map<K extends Object, V extends Object>
đối tượng có nghĩa là một lớp và cũng có nghĩa là bạn có thể tạo một lớp khác xuất phát từ nó, nhưng bạn không thể tạo một lớp xuất phát từ int. Vì vậy, bạn không thể sử dụng biến int làm đối tượng. Tôi có giải pháp kéo cho vấn đề của bạn:
Map<String, Integer> map = new HashMap<>();
hoặc là
Map<String, int[]> map = new HashMap<>();
int x = 1;
//put x in map
int[] x_ = new int[]{x};
map.put("x", x_);
//get the value of x
int y = map.get("x")[0];
Bạn có thể sử dụng kiểu tham chiếu trong các đối số chung, không phải kiểu nguyên thủy. Vì vậy, ở đây bạn nên sử dụng
Map<String, Integer> myMap = new HashMap<String, Integer>();
và lưu trữ giá trị như
myMap.put("abc", 5);