Java 为私有内部类的成员选择描述性可见性
在我的数据结构类中,我们使用私有内部类实现红/黑树的Java 为私有内部类的成员选择描述性可见性,java,visibility,inner-classes,Java,Visibility,Inner Classes,在我的数据结构类中,我们使用私有内部类实现红/黑树的节点。这种节点是红/黑树所独有的,因此内部类的可见性是私有的。内部类的成员是 我应该如何为这个内部类的成员选择可见性?如果编译器没有区别,那么哪种可见性在语义上最有意义 public class RedBlackTree<K extends Comparable<? super K>, V> { private static enum NodeColor { RED, BLACK } private
节点。这种节点
是红/黑树所独有的,因此内部类的可见性是私有的
。内部类的成员是
我应该如何为这个内部类的成员选择可见性?如果编译器没有区别,那么哪种可见性在语义上最有意义
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;
}
}
最后,这取决于您的编码风格。就我自己而言,我倾向于将private
视为“仅在此类内”,即使外部类可以使用它们,因此我将仅在内部类中使用的变量声明为private
。我想,与许多其他开发人员不同的是,我将其他一切都设置为默认(没有修改器)
不过,老实说,为“非私有”成员使用public
可能是一个更好的主意,因为查看您的代码的其他人会知道,您打算在内部类之外使用该成员
只要您不想编写不必要或低效的代码(例如private
内部类的private
字段的getter/setter),您就可以遵循任何您喜欢的范例。如果你正在与他人合作或在一个小组项目中工作,试着跟随当前的趋势。我同意private
的这个语义含义。它说明了成员封装的开始和结束位置。我所看到的一些相互冲突的实践是“始终使用尽可能狭窄的可见性”或“隐藏所有非最终成员”,但Java语言似乎无法保护内部类的封装,因此我最好通过使用public
显式来弥补这一点。