在Java实现中,我发现
transient Entry[] table;
which is initiated in constructor as
table = new Entry[capacity];
我知道并了解不允许创建通用数组,但是我无法理解的是整个过程是如何工作的。我的意思是当我们做类似的事情时
HashMap<Integer, String> hMap = new HashMap<Integer, String>();
上面的代码如何导致创建类型为
<Integer, String>
的Entry数组好吧,很少有人无法理解我的要求。改写我要问的是做这样的事情有什么意义
HashMap<Integer, String> hMap = new HashMap<Integer, String>();
当它不导致
Entry<Integer, String>
最佳答案
该实现使一个Entry<K,V>
对象类型的数组
static class Entry<K,V> implements Map.Entry<K,V>
而不提供通用类型参数(source)。这是允许的,但需要了解编译器不再保证类型安全。例如,在代码的其他地方,您可以编写
Entry<K,V> e = table[bucketIndex];
编译器将允许您这样做。如果您确定始终将
table[]
的元素设置为null
或Entry<K,V>
,则可以知道分配是正确的。这样做没有问题的原因是Java中的泛型类型是通过类型擦除实现的,即
Entry<K,V>
对象Entry<Integer,Integer>
和Entry<String,Long>
在运行时没有区别。