如何创建包含 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。当 generics
是 V[]
时,上下文没有 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
我有一个任务,目标是创建一个具有通用键和值的 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。当 generics
是 V[]
时,上下文没有 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