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)
泛型是编译时的安全性.在运行时,地图只知道对象.这被称为类型擦除.为了吓唬你,以下代码将运行没有问题:
Map<Integer, Integer> safeMap = new HashMap<>();
Map unsafeMap = safeMap;
unsafeMap.put("hello", "world");
Run Code Online (Sandbox Code Playgroud)
您将在编译时收到警告,因为您使用的是原始地图而不是通用地图,但在运行时,根本没有检查,因为地图是一个能够存储任何对象的旧地图.只有编译器阻止您在地图或整数中添加字符串.