gpt4 book ai didi

java - Hashmap 不适用于 int、char

转载 作者:IT老高 更新时间:2023-10-28 20:21:07 27 4
gpt4 key购买 nike

Possible Duplicate:
Storing primitive values in a Java collection?

在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 无法处理原始数据类型。

最佳答案

泛型参数只能绑定(bind)引用类型,不能绑定(bind)原始类型,所以需要使用对应的封装类型。试试 HashMap<Character, Integer>而是。

However, I'm having trouble figuring out why HashMap fails to be able to deal with primitive data types.

这是由于 type erasure . Java 从一开始就没有泛型,所以 HashMap<Character, Integer>真的是HashMap<Object, Object> .编译器会进行一系列额外检查和隐式强制转换,以确保您不会输入错误类型的值或输出错误类型,但在运行时只有一个 HashMap类,它存储对象。

其他语言在 C++ 中“专门化”类型,vector<bool>vector<my_class> 非常不同在内部,他们没有共同点vector<?> super 类型。 Java 定义了一些东西,所以 List<T> is a List不管是什么T是为了向后兼容预通用代码。这种向后兼容的要求(泛型类型的所有参数化必须有一个实现类)阻止了允许泛型参数绑定(bind)到基元的模板特化。

关于java - Hashmap 不适用于 int、char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13216314/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com