2011-06-30 10 views
3

私はJavaクラスAを持っているとしましょう。ヘルパークラスBが必要です。そのヘルパークラスはAでのみ使用され、他の目的はありません。また、Bは、いかなる方法でもを使用する必要はありません(メソッドやアクセスフィールドを呼び出さないでください)。非公開のクラスはどこに置くのですか?

質問はどこにありますか?B

  1. 静的な入れ子になったクラス:

    には、次のオプションがあります。私の意見では、コードをあまり明確にしない(はるかにインデントなど)。

    public class A { 
        ... 
        private static class B { ... } 
    } 
    
  2. 同じソースの非公開クラスです。私はこのオプションが好きです。別々のソースに

  3. 非publicクラス。このオプションのように見えますが、少しオーバーヘッドがあります。今の

    // A.java 
    public class A { 
        ...    
    } 
    
    // B.java 
    class B { 
        ... 
    } 
    

、私は2番目のオプションを好みます。あなたの考えはどうですか?ベストプラクティスは何ですか? 権限のある情報源はありますか?

+1

また、** B **はかなり小さいと考えてください。本当に大きなクラスでは、使用方法にかかわらず、自分のソースファイルを取得する必要があります。 – Andy

+0

@Everyone ...オプションBのクラスBは本当にプライベートですか?私は彼らがデフォルトの有効範囲を持っていると思う(パッケージの他のクラスで使用できる)。 – SJuan76

+0

@ SJuan76 ya、ちょうどデフォルトスコープ。 – aps

答えて

5

オプション(1)に強く票を投じます。考え方は、クラスBはクラスAによってのみ必要であり、オプション(1)はその意図を明確に表現する唯一の選択肢です。クラスBはクラスAの一部です。

+0

ええ、クラス** A **以外のアクセスを強制する唯一の選択肢のようです。 – Andy

1

itでしたか?

には重大な欠点はありませんが、一つは、確かに、少なくとも数を含め把握することができます:

  • 理解することは困難 - 特に、コードにそれは難しい高め、維持することができる非経験のプログラマのための。
  • クラスの数が増えます - アプリケーションで使用されているクラスの総数が増えます。メモリにロードされたすべてのクラスに対して、JVMはクラスのオブジェクトを作成します。 JVMがすべての余分なクラスに対して行う必要があるかもしれない他のルーチンタスクがあるかもしれません。これは、アプリケーションが複数のネスト/インナークラスを使用している場合(パフォーマンスが低下している可能性があるため)、パフォーマンスが若干低下する可能性があります。
  • Tools/IDEによる限定的なサポート - ネストされたクラスは、ほとんどのツールとIDEでトップクラスのクラスと同じサポートを受けません。これは時々開発者を刺激するかもしれません。
+0

残念ながら、いいえ。この記事では、静的なネストされたクラスの内容についてのみ説明しますが、説明されたケースで何を使用するべきかについては何の洞察もしていません。 – Andy

1

静的ネストされたクラスは、A.Betterカプセル化内で使用できます。ネストされたクラスは論理的に1つの場所でのみ使用されるクラスをグループ化するためです。あなたのヘルパークラスはフィールドだけを含んでいますか?

+0

"あなたは静的な入れ子になったクラスをBの中で使うことができます"という意味を理解していません。あなたは「A内」を意味しますか? – Andy

+0

ああ、ああ、申し訳ありません.Aは意味しました。 – aps

+0

ヘルパークラスについて。実際には、** B **は抽象クラスを拡張し、そのメソッドの1つを実装しています(実装はかなり単純です)。その後、** A **は** B **を呼び出します。 – Andy

関連する問題