在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[]的元素设置为nullEntry<K,V>,则可以知道分配是正确的。

这样做没有问题的原因是Java中的泛型类型是通过类型擦除实现的,即Entry<K,V>对象Entry<Integer,Integer>Entry<String,Long>在运行时没有区别。

10-07 16:17
查看更多