当前位置: 首页 > 面试题库 >

Hashmap不适用于int,char

拓拔元徽
2023-03-14
问题内容

在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是与前通用代码的向后兼容性。向后兼容的要求,对于泛型类型的所有参数化必须有一个单独的实现类,这阻止了模板特殊化的类型,后者会使泛型参数绑定到基元。



 类似资料:
  • 创建一个名为平均值的方法,用于计算作为参数传递的数字的平均值。之前创建的方法和必须在此方法中使用! 在以下模板中定义方法: 我正在努力将sum()方法放在average()方法中。我不知道如何让它工作,因为我在eclipse中不断遇到这样的错误: 这是我的代码: 我知道这与我将average方法定义为double类型有关,但我尝试将它们改为double,并调用我的变量“int avg=…”作为“双

  • 我正在做一个小的C项目,为此我创建了一个漂亮且方便的<code>std::ostream</code>包装器,名为<code>Logger</code>。 在类内部,我定义了一个模板化的操作符: 当模板实例化为整数类型时,如或,模板就像一个符咒。因此,声明 它编译得很好。 但是,如果我将语句更改为 编译器向我喊道模板无法实例化。 来自编译器的错误消息: 问题出在哪里? 我试图替换< code >

  • 问题内容: 嗨,我只是简单地尝试在www.example.com上获取h1标签,该标签显示为“ Example Domain”。该代码适用于http://www.example.com,但不适用于https://www.exmaple.com。我该如何解决这个问题?谢谢 问题答案: PhantomJSDriver不支持(所有)DesiredCapabilities。 你会需要: 记录在这里:htt

  • 所以我使用这种方法写入文件,它在windows上运行完全正常,但在mac上运行时,它会创建文件,但它们是空的。 我知道数据是正确的,因为它打印正确。感谢您的任何帮助,这真的让我绊倒了。

  • 列名称的类型为int[] 上述查询适用于postgresql,但不适用于hsqldb,甚至适用于sql 尝试的hsqldb版本:2.2.9和2.3.0 在hsqldb中工作的sql是从table_name中选择x,unnest(column_name)y(x)x和y不是该表的列。

  • 我能够成功地打电话给邮递员: /mfp/api/az/v1/token和 /mfpadmin/management-apis/2.0/runtimes/mfp/applications 我正在获取从/mfp/api/az/v1/token接收的承载令牌,并将其添加到/mfp/applications的授权标头中。 我收到了来自两者的200个响应,并从每个API中获取了预期的信息。 然后,我选择从P