Java定义类的参数时的一个注意事项
我在做CS 61B 21sp的lab7时,为了实现BST
public class BSTMap<K extends Comparable<K> , V> implements Map61B<K, V>{ }
定义了一个类
private class Node<K,V>{ private K key; private V value; private Node<K,V> left, right; public Node(K key, V value){ this.key = key; this.value = value; }
}
调用方法get时报错: java: 不兼容的类型: java.lang.Object无法转换为K
private V get(Node node, K key){ if (node == null) { return null; } if (key == null){ throw new UnsupportedOperationException("Key cannot be null"); } int cmp = key.compareTo(node.key); if (cmp == 0){ return node.value; } else if (cmp < 0){ return get(node.left, key); } else { return get(node.right, key); } }
错误原因: 因为在get
方法的私有辅助方法中,没有为Node
类指定类型参数。
修改方法一:定义类时改为 private class Node{}
修改方法二: 将所有Node
类的实例与正确的类型参数匹配, 亦即将Node node 改为 Node<K, V> node