Hashmap不适用于int,char
在Java中,当我使用以下命令时:
public HashMap<char, int> buildMap(String letters){
HashMap<char, int> checkSum = new HashMap<char, int>();
for ( int i = 0; i < letters.length(); ++i )
{
checkSum.put(letters.charAt(i), primes[i]);
}
return checkSum;
}
我收到与不当类型相关的错误。我通过分别使用Character和Integer而不是char和int解决了我的问题。但是,我很难弄清楚为什么HashMap无法处理原始数据类型。
回答:
通用参数只能绑定到引用类型,而不能绑定到原始类型,因此您需要使用相应的包装器类型。试试吧HashMap<Character, Integer>
。
但是,我很难弄清楚为什么HashMap无法处理原始数据类型。
这是由于类型擦除引起的。Java从一开始就没有泛型,因此a
HashMap<Character, Integer>
确实是一个HashMap<Object,
Object>。编译器会进行大量其他检查和隐式强制转换,以确保您不会输入错误的值类型或得出错误的类型,但是在运行时只有一个HashMap
类并且它存储对象。
其他语言“专门化”类型,因此在C ++中,a
vector<bool>
与vector<my_class>
内部语言非常不同,并且不共享通用的vector<?>
超类型。Java定义的东西,但这样,一个List<T>
List
不管什么T
是与前通用代码的向后兼容性。向后兼容的要求,对于泛型类型的所有参数化必须有一个单独的实现类,这阻止了模板特殊化的类型,后者会使泛型参数绑定到基元。
以上是 Hashmap不适用于int,char 的全部内容, 来源链接: utcz.com/qa/424979.html