为私有内部类的成员选择描述性可见性

时间:2016-10-11 19:19:46

标签: java visibility inner-classes

在我的数据结构类中,我们使用私有内部类实现红色/黑色树的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在语义上有意义。哪一个是最佳实践,如果有的话?

1 个答案:

答案 0 :(得分:1)

最后,这取决于您的编码风格。对于我自己,我倾向于将private视为&#34;仅在此类中#34;,即使外部类可以使用它们,因此我声明仅在内部类中使用的变量{{1} }。与其他许多开发者不同,我想,我做了其他一切默认(没有修饰符)。

private用于&#34;非私人&#34;但是,诚实地说,成员可能是一个更好的主意,因为查看代码的其他人会知道你打算让这个成员在内部类之外使用。

只要您不想编写不必要或效率低下的代码(例如public内部类的private字段的getter / setter),您就可以遵循任何范例喜欢。如果您正在与他人合作或在小组项目中工作,请尝试遵循当前趋势。