HashMap 类型不是泛型,无法使用参数 <String, Integer> 进行参数化。

8

今天我尝试实现以下代码时出现了一个奇怪的错误。

Map<String, Integer> cache = new HashMap<String, Integer>();

我正在使用JDK 1.7,不确定为什么会出现这个错误,但是通过添加强制转换来更改上面的行可以消除错误。在发布这个问题之前,我查看了stackoverflow上的相关帖子,似乎是一个奇怪的问题。

Map<String, Integer> cache = (Map<String, Integer>) new HashMap();

12
你确定你的代码中MapHashMap都来自于java.util包吗? - Luiggi Mendoza
@Shane - 有什么错误吗?你是否使用像Eclipse这样的IDE? - Sachin Thapa
3
你是否在任何地方声明了自己非泛型的HashMap类?请提供一个简短但完整的程序来演示问题。 - Jon Skeet
1
我遇到了相同的错误。在我的情况下,我给我的类起了相同的名字,即创建了一个标记为HashMap的类。这与java.util.HasMap发生了冲突。请确保你的类名不同。 - Bhardwaj Joshi
13个回答

30

请检查您在 imports 中是否实际使用了 java.util.HashMapjava.util.Map


8
我也遇到了同样的错误,但只需更改项目的一些属性即可解决:
  • 右键单击您的项目
  • 点击属性
  • 从右侧面板中选择Java Build Path
  • 选择Order and Export选项卡
  • 点击您的JRE System Library 或 JDK Library
  • 点击上移按钮并将其移到第一位置
  • 点击确定
  • 清理并构建您的项目。

如果您有其他依赖项,请为所有其他依赖项也重复此操作。

这解决了我的问题,因为以前的Java文件是从JRE包中设置为最后优先级的其他库和软件包。


1
谢谢,这对我很有帮助。 - Mahesh Narwade

2

我相信你导入了错误的HashMap。对于你展示的代码,你必须使用java.util包。

如果没有看到你的导入语句,我们无法再帮助你了。


1

HashMap类型不是通用的;它不能使用<String,Integer>参数进行参数化。

如果出现这种类型的错误,请首先检查您的文件名和类名,因为可能会错误地将文件名保存为HashMap.java,然后尝试其他方法。


HashMap不是泛型,是什么意思?java.util.HashMap的定义如下: public class HashMap<K,V> extends AbstractMap<K,V> - Tzach Solomon
欢迎来到SO!请阅读tour如何撰写好的答案? - Tomer Shetah

0

永远不要将你的类名与Java Util中预定义的任何类名相同。

例如:在Java中,HashMap是预定义类,如果创建一个同名的新类,即HashMap,那么很明显会出现错误。


1
欢迎来到SO。回答问题时,请尽量针对问题本身,而非其他答案。 - franiis

0
如果以上解决方案都不起作用,你遇到这个错误的唯一可能原因是你将类名命名为与已经存在于util或lang库中的类相似。

0

使用 java.util.Map.<String, Integer> cache = new HashMap<String, Integer>();,并且导入 import java.util.*;


这个回答对该主题没有带来任何新的内容,类似的解决方案在之前的回答中已经提出,例如在这个回答中:https://dev59.com/43fZa4cB1Zd3GeqPOzUI#53969107 - Ruli

0

请尝试以下方法:

  1. 在同一包中创建一个新类并给它一个独特的名称

  2. 导入 - import java.util.*;import java.util.HashMap;

  3. 创建HashMap:

HashMap<Integer,String> map=new HashMap<Integer,String>();(旧的冗长方式)

或者

HashMap<String, Integer> map = new HashMap<>(); (更好的方式)

或者

Map<String, Integer> map = new HashMap<>(); (最佳方式)

编译并运行


0
当你编译的Java版本低于你的JDK时会发生这种情况。确保“编译器兼容级别”(Eclipse称之为)足够高。我也遇到过这个问题。在我的Eclipse中,当我的JDK是Java 7,但编译器兼容级别是1.4时,在Project->Properties->Java Compiler中发生了问题。我将编译器兼容级别提高到6.0,问题就消失了。

0

最近,我遇到了同样的问题。几乎找到了所有答案,但都失败了。
我已经导入了java.util.HashMapjava.util.Map或将JRE系统库设置为顶部。但是徒劳无功。

最后,我尝试将我的类名从HashMap更改为HashMapDemo。现在,我只想告诉你,你的类名可能是java.util.*中的一个,你应该更改你的类名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接