参数化类中的静态嵌套类

时间:2014-08-18 16:34:47

标签: java

我正在查看实现显示here的二叉搜索树的Java代码,我认为如果内部类Node实际上变成static nested class会更好。但是,在前面添加static关键字(我以为我可以这样做,因为内部类实际上并没有使用封闭类的实例 - 我可以在Node内部访问的那个class BST.this - 绑定到它)导致多个错误,这些错误并非极其有用。

据我所知,java.util.LinkedList和类似的也使用静态嵌套类来定义存储在其中的节点,并且也参数化(当然,工作没有任何问题)。有人在意吗?

感谢。

1 个答案:

答案 0 :(得分:6)

如果你创建内部类static,你将失去周围类的类型参数。 Node无法访问KeyValue,因为它不再与BST的实例相关联。您也可以通过向Node添加类型参数来解决此问题:

private class Node<NodeKey extends Comparable<NodeKey>, NodeValue> {
    private NodeKey key;           // sorted by key
    private NodeValue val;         // associated data
    private Node<NodeKey, NodeValue> left, right;  // left and right subtrees
    private int N;             // number of nodes in subtree

    public Node(NodeKey key, NodeValue val, int N) {
        this.key = key;
        this.val = val;
        this.N = N;
    }
}

Node

替换Node<Key, Value>的每一次出现