Java 为什么可以';t I初始化映射<;int,String>;?

Java 为什么可以';t I初始化映射<;int,String>;?,java,generics,map,Java,Generics,Map,我想存储一组int/String值,但是ints不一定是递增的,这意味着数据可以是: <1, "first">, <3, "second">, <9, "third">. 。 因此,我试图创建一个c#等价的字典,但它无法编译,在代码行上说“标记“int”上的语法错误,该标记后面应该有维度”: private Map<int, String> courses; 私人地图课程; 谁能告诉我这是为什么?除了创建对象作为int和String的占位

我想存储一组
int
/
String
值,但是
int
s不一定是递增的,这意味着数据可以是:

<1, "first">, <3, "second">, <9, "third">. 
因此,我试图创建一个c#等价的
字典
,但它无法编译,在代码行上说“标记“int”上的语法错误,该标记后面应该有维度”:

private Map<int, String> courses;
私人地图课程;

谁能告诉我这是为什么?除了创建对象作为
int
String
的占位符,然后使用数组存储它们之外,还有一个很好的替代方法。

不能将基元类型用作泛型类型参数

使用

私人地图课程;
请参阅有关泛型的更多限制


Dev的贡献:只有引用类型(和通配符)可以用作泛型类型参数。

使用Integer作为键类型。它可以衰减为int,因此它同样有用。相关:至于原因,[Java语言规范]()指定只有
ReferenceType
可以用作类型参数。@开发人员,谢谢,放弃了寻找它:如果您不希望将键值装箱为
Integer
对象的开销,然后您可以使用第三方解决方案。这个库有,Android有(后者当然只对Android项目有用)。但是,这些第三方映射没有实现Java集合框架中的
Map
接口,因为键不是对象。
private Map<Integer, String> courses;