Java定义类的参数时的一个注意事项

发布时间 2023-12-15 15:00:43作者: Sysyphus42

我在做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