私はプロジェクトで働いており、最も内側のクラスへのアクセスを許可したくありません。これは、私が使用しているクラス構造です。JAVAでのカプセル化のレベル
// data types are not important unless mentioned
class One
{
protected propertyOne;
protected String id;
}
class Two
{
protected ArrayList<One> arrayOne;
protected String id;
}
class Three
{
protected ArrayList<Two> arrayTwo;
protected otherProperty;
}
ここで、メインクラスはThreeをインスタンス化し、メンバメソッドを通してTwoとOneを使用する必要があります。 get関数でArrayList
のいずれかを返すと、すべてのデータをどこからでも簡単に変更できます。だからArrayList<Two>
の代わりに、私はArrayList<Two.id>
を返しており、別の方法が特にTwo.id
と呼ばれています。これはArrayList
を隠しておくようにしますが、ArrayList<Two.id>
とArrayList<One.id>
のために多くのコードと余分なオブジェクトを生成します。
C++では、const
メソッドをconst
の戻り値タイプに変更し、ArrayList
に変更がないようにしました。
ArrayList
を隠すためにJavaにスマートな方法はありますか?
たとえば、次のようなゲッターメソッドを提供できます。呼び出し元が 'arrayTwo'を変更するのを防ぐために' Collections.unmodifiableList(arrayTwo) ' –
私は 'protected'ではなく' private'も全てとしています。 'protected'は、同じパッケージ内の他のクラスやサブクラスへのアクセスを許可します。 –
['コレクション。 unmodifiableList(リスト) '?](https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#unmodifiableList-java.util.List-) –
Turing85