为什么我不能初始化Map <int,String>?

Tho*_*mas 7 java generics map

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

<1, "first">, <3, "second">, <9, "third">. 
Run Code Online (Sandbox Code Playgroud)

所以我正在尝试创建一个等效的c#,Dictionary<int, string>但它只是无法编译,说"令牌上的语法错误"int",此符号后面的维度"在线上:

private Map<int, String> courses;
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么会这样?和一个很好的选择,为创建一个对象作为占位符intString,然后用一个数组来存储它们?

Sot*_*lis 22

您不能将原始类型用作泛型类型参数.

使用

private Map<Integer, String> courses;
Run Code Online (Sandbox Code Playgroud)

此处查看有关泛型的更多限制.

Dev的贡献:JLS指定只能将引用类型(和通配符)用作泛型类型参数.

  • 如果您不希望将键值键的开销设置为"整数"对象,则可以使用第三方解决方案.[Trove](http://trove.starlight-systems.com/)库有[TIntObjectHashMap](http://trove4j.sourceforge.net/javadocs/gnu/trove/map/hash/TIntObjectHashMap.html)和Android有[SparseArray](http://developer.android.com/reference/android/util/SparseArray.html)(后者仅对Android项目有用).但是,这些第三方映射不会从Java集合框架实现"Map"接口,因为键不是对象. (2认同)