我正在查看实现显示here的二叉搜索树的Java代码,我认为如果内部类Node
实际上变成static nested class会更好。但是,在前面添加static
关键字(我以为我可以这样做,因为内部类实际上并没有使用封闭类的实例 - 我可以在Node
内部访问的那个class BST.this
- 绑定到它)导致多个错误,这些错误并非极其有用。
据我所知,java.util.LinkedList
和类似的也使用静态嵌套类来定义存储在其中的节点,并且也参数化(当然,工作没有任何问题)。有人在意吗?
感谢。
答案 0 :(得分:6)
如果你创建内部类static
,你将失去周围类的类型参数。 Node
无法访问Key
和Value
,因为它不再与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>
的每一次出现