如何创建包含 Java 中的泛型的自定义数组 class

how to create an array of custom class that contains generics in Java

我有一个任务,目标是创建一个具有通用键和值的 HashTable 实现。为了处理冲突,我们被告知使用单独的链接。所以,我尝试这样做:

public class HashTable<K, V> implements Table<K, V> {

    private Node[] generics;

    public class Node {

        V value;
        Node next;

        public Node(V val) {
            value = val;
        }

    }

    public HashTable(int size) {
        generics = (Node[]) new Object[size];
    }

}

对于单独的链接,我想使用链表实现(还有什么),这就是为什么我需要 generics 来保存 Node,而不仅仅是 V的。我不能只写 generics = new Node[size]; 的原因是节点 class 包含泛型,并且不允许创建泛型数组。对于此分配,可以接受产生 "unchecked cast" 警告的变通方法。

然后,在驱动程序中,它会尝试 Table<String, String> ht = new HashTable<String, String>(5); 并获取 ClassCastException。当 genericsV[] 时,上下文没有 ClassCastException。

所以,我的问题是:如何创建自定义 class 数组,其中自定义 class 包含泛型(不更改驱动程序)?

尝试以下解决方案

public class HashTable<K, V> {
    private Node<V>[] generics;

    static class Node<V> {
        V value;
        Node next;
        public Node(V val) {
            value = val;
        }
    }
    private HashTable(int size) {
        generics = (Node<V>[]) new Node[size];
    }
}

generics = (Node[]) new Node[size];此行将为您提供此代码的未经检查的强制转换警告 impl check HashMap source code

如果您想删除未检查的转换警告而不是泛型引用中的通配符

 public class HashTable<K, V> {
    private Node<?>[] generics;

    static class Node<V> {
        V value;
        Node next;
        public Node(V val) {
            value = val;
        }
    }
    public HashTable(int size) {
        generics = new Node<?>[size];
    }
 }

它不会给你任何"unchecked cast"警告。为此你可以 HashTable source code