2016-10-11 18 views
1

私のデータ構造クラスでは、プライベート内部クラスを使用して赤色/黒色ツリーの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製センス意味的に述べました。もしあれば、どれがベストプラクティスですか?

答えて

1

最後に、これはコーディングスタイルによって異なります。私自身は、privateを「このクラスのみ」と見なす傾向があります。外側のクラスでも使用できる場合でも、内側のクラスでのみ使用される変数はprivateと宣言しています。他の多くの開発者と違って、私は想像して、私は他のすべてを作るデフォルト(修飾子なし)。

「プライベートでない」メンバーにはpublicを使用してください。正直なところ、あなたのコードを見る人は、そのメンバーをインナークラスの外で使用させることを意図していることを知っているからです。

不要なコードや非効率なコード(private内部クラスのprivateフィールドのゲッター/セッターなど)を作成したくない限り、好きなパラダイムに従うことができます。他の人やグループプロジェクト内で作業している場合は、現在の傾向に従ってください。

+0

私は、この「private」の意味に同意します。それは、カプセル化がメンバーのどこで始まり、終わるかについて何かを言います。私が見ることができるいくつかの矛盾したプラクティスは、「常に最も狭い可能性のある可視性を使用する」または「非最終メンバをすべて非表示にする」ことですが、Java言語は内部クラスのカプセル化を保護しないようです。それは 'public'と明示的になります。 – 4castle

関連する問題