HashMap实现中的泛型

Wal*_*alt 0 java generics hashmap

在Java实现中,我找到了

 transient Entry[] table; 
 which is initiated in constructor as
 table = new Entry[capacity];
Run Code Online (Sandbox Code Playgroud)

我知道并且理解不允许创建通用数组,但是我无法理解的是整个事情是如何工作的.我的意思是当我们做类似的事情

HashMap<Integer, String> hMap = new HashMap<Integer, String>();
Run Code Online (Sandbox Code Playgroud)

上面的代码如何导致创建一个类型的Entry数组 <Integer, String>

好吧,很少有人无法理解我的要求.重新说一下我要问的是做什么的重点

HashMap<Integer, String> hMap = new HashMap<Integer, String>();
Run Code Online (Sandbox Code Playgroud)

当它没有导致

Entry<Integer, String>
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 7

泛型是编译时的安全性.在运行时,地图只知道对象.这被称为类型擦除.为了吓唬你,以下代码将运行没有问题:

Map<Integer, Integer> safeMap = new HashMap<>();
Map unsafeMap = safeMap;
unsafeMap.put("hello", "world");
Run Code Online (Sandbox Code Playgroud)

您将在编译时收到警告,因为您使用的是原始地图而不是通用地图,但在运行时,根本没有检查,因为地图是一个能够存储任何对象的旧地图.只有编译器阻止您在地图或整数中添加字符串.