问题与此类似为什么我们必须为@SuppressWarnings("unchecked") 使用中间变量?,但我无法从那个中收集解决方案。
作为一个练习,我正在从头开始构建一个哈希表结构。于是我写了一个类LinkedListDemo辅助HashTableDemo;LinkedListDemo 类测试非常好。特别是,以下子例程在运行时不会导致 ClassCastException 错误:
public LinkedListDemo<S, T> reverse() {
if (count == 0)
return null;
@SuppressWarnings("unchecked")
S[] keys = (S[]) new Object[count];
@SuppressWarnings("unchecked")
T[] vals = (T[]) new Object[count];
ListNode<S, T> runner = head;
for (int k = 0; k < count; k++) {
keys[k] = runner.pair.getKey();
vals[k] = runner.pair.getValue();
runner = runner.next;
}
ArrayUtils.reverse(keys);
ArrayUtils.reverse(vals);
return new LinkedListDemo<S, T>(keys, vals);
}
而以下,在我的 HashTable 类中:
public class HashTableDemo<S, T> {
private LinkedListDemo<S, T>[] table = (LinkedListDemo<S, T>[]) new Object[10];
// more code...
}
有谁知道 Java 的 HashMap 类如何规避这个问题,和/或我怎么能?我尝试按照上面链接中的建议在构造函数中创建一个中间变量 - 但它没有用。