在我的数据结构类中,我们使用私有内部类实现红色/黑色树的Node
。这种Node
是红/黑树独有的,因此内部类的可见性为private
。内部类的成员是always accessible from the enclosing class。
我应该如何为这个内部类的成员选择可见性?如果编译器没有区别,哪种可见性在语义上最有意义?
public class RedBlackTree<K extends Comparable<? super K>, V> {
private static enum NodeColor { RED, BLACK }
private class Node {
private final K key; // these are private, currently for no particular reason
private V value;
private Node left;
private Node right;
private NodeColor color;
private Node(K key, V value, NodeColor color) {
this.key = key;
this.value = value;
this.color = color;
}
}
// Precondition - both children are red, and node is black.
// Postcondition - both children are black, and node is red.
private void colorFlip(Node node) {
node.color = NodeColor.RED;
node.left.color = NodeColor.BLACK; // these statements compile, as expected
node.right.color = NodeColor.BLACK;
}
}
在this question中,OP表示private
在语义上有意义,而在this answer中,作者说public
在语义上有意义。哪一个是最佳实践,如果有的话?
答案 0 :(得分:1)
最后,这取决于您的编码风格。对于我自己,我倾向于将private
视为&#34;仅在此类中#34;,即使外部类可以使用它们,因此我声明仅在内部类中使用的变量{{1} }。与其他许多开发者不同,我想,我做了其他一切默认(没有修饰符)。
将private
用于&#34;非私人&#34;但是,诚实地说,成员可能是一个更好的主意,因为查看代码的其他人会知道你打算让这个成员在内部类之外使用。
只要您不想编写不必要或效率低下的代码(例如public
内部类的private
字段的getter / setter),您就可以遵循任何范例喜欢。如果您正在与他人合作或在小组项目中工作,请尝试遵循当前趋势。