0

Javaクラスをいつ作成するかについて混乱しています:

  • ネストされた静的クラス
  • 同一パッケージ内の最上位クラス
  • 別のパッケージの最上位クラス

例えば

class School {
    static class Grade {
        static class Class {
            static class Student {
            }
        }
    }
}

これは論理的に優れた設計ですか?オブジェクトを論理レイヤーに配置します。クラスがこのようにネストされていない場合、論理層によって名前空間が汚染されます。学生は他の場所に行くかもしれません。Student 用のパッケージを作成すると、改善されますか?

この構造をネストまたはフラット化する必要がありますか?

4

3 に答える 3

2

私の意見では:平らにします。学生は同じクラスに永遠にとどまらないからです。

于 2013-10-30T23:05:49.347 に答える
1

平らにします。これは、インスタンスのカプセル化のアイデアを名前空間と混同したように見えます。School インスタンスには、Students への多くの参照が含まれる場合がありますが、Studentタイプを School タイプ内にスコープする必要がある理由はありません。

学生とは、学生服を意味する場合もあります。

Student は、 Student以外の意味であってはなりません。服とは関係ないはずです。

それら用のパッケージを作成すれば、もう少し良くなるでしょう。

はい、パッケージは型を整理するためのコンテナーです。ネストされた型でない限り、型自体をこのように使用しないでください。

  1. 外側の型と密接に結びついているため、それ自体では意味がありません。

  2. 外側のクラスに固有の方法で明示される一般的な概念です。たとえば、Map.Entry「エントリ」は一般的な概念であり、この特定のタイプのエントリはマップを処理する場合にのみ関連するため、ネストされた静的タイプ (インターフェース) として適切です。

  3. 外部クラス内でのみ使用され、その外部では表示されません (または、少なくともパッケージの外部では表示されません)。

于 2013-10-30T23:06:02.867 に答える