我正在实现一个简单的Tree数据结构。 我的目标是在Tree类中创建一个Node类型的对象。 在这种情况下,我不明白如何管理泛型。
这是我的瘦树结构:
public class RBT<K extends Comparable<K>, V> {
Node<K,V> a = null;
Node<Integer,String> b = null;
public RBT() {
this.a = new Node<K,V>(new Integer(1), new String("node1")); // ERROR
this.b = new Node<Integer, String>(new Integer(1), new String("node1"));
this.a = this.b; // ERROR!
}
public void newNode(K key, K value) {
Node<K,V> test = new Node<K,V>(key, value); // ERROR
}
public static void main(String[] args) {
RBT<Integer,String> rbt = new RBT<Integer,String>();
rbt.newNode(new Integer(2), new String("node2")); // ERROR!
}
}
这是我的节点表示:
public class Node<K,V> {
private Node<K,V> father;
private Node<K,V> left;
private Node<K,V> right;
private K key;
private V value;
Node(K key, V value) {
this.father = this.left = this.right = null;
this.key = key;
this.value = value;
}
}
提前感谢您的帮助。
答案 0 :(得分:1)
首先,
this.a = new Node<K,V>(new Integer(1), new String("node1")); // ERROR
在为其提供确切类型时,无法将K,V添加为泛型。 所以删除它
this.a = new Node(new Integer(1), new String("node1"));
其次,
this.a = this.b; // ERROR!
this.a
具有通用<K,V>
,而this.b
具有<Integer,String>
。因此,您可以通过投放来解决不匹配问题,因为您确切知道K,V
将是Integer,String
。
this.a = (Node<K, V>) this.b;
此处您的方法签名错误
public void newNode(K key, K value) {
^ should be V
Node<K,V> test = new Node(key, value); // ERROR
}
答案 1 :(得分:0)
我是一个使用Generic of Java的菜鸟。你可以这样做。
public class RBT<K extends Comparable<K>, V> {
Node<K,V> a = null;
Node<Integer,String> b = null;
public RBT() {
this.a = new Node(new Integer(1), new String("node1")); // ERROR
this.b = new Node<Integer, String>(new Integer(1), new String("node1"));
this.a = (Node<K, V>) this.b; // ERROR!
}
public void newNode(K key, V value) {
Node<K,V> test = new Node(key, value); // ERROR
}
public static void main(String[] args) {
RBT<Integer,String> rbt = new RBT<Integer,String>();
rbt.newNode(new Integer(2), new String("node2")); // ERROR!
}
}
原谅我可怜的英语。我不是母语。
答案 2 :(得分:-1)
正如您已经发现的那样,你不能写
new Node<K, V>
您必须指定类型。
Node<Integer, String> node = new Node<Integer, String>(new Integer(1), new String("anything"))