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;