私のデータ構造クラスでは、プライベート内部クラスを使用して赤色/黒色ツリーのNode
を実装しています。この種類のNode
は赤/黒のツリーに固有のものなので、内部クラスの可視性はprivate
です。内部クラスのメンバーはalways accessible from the enclosing classです。プライベート内部クラスのメンバーの説明的な可視性を選択する
この内部クラスのメンバーの可視性をどのように選択する必要がありますか?コンパイラとの違いがない場合、どの可視性が意味的に最も意味をなすでしょうか? this answerで、著者はpublic
が意味的に意味を成して前記ながらthis questionで
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;
}
}
は、OPは、private
製センス意味的に述べました。もしあれば、どれがベストプラクティスですか?
私は、この「private」の意味に同意します。それは、カプセル化がメンバーのどこで始まり、終わるかについて何かを言います。私が見ることができるいくつかの矛盾したプラクティスは、「常に最も狭い可能性のある可視性を使用する」または「非最終メンバをすべて非表示にする」ことですが、Java言語は内部クラスのカプセル化を保護しないようです。それは 'public'と明示的になります。 – 4castle