Javaにおいて、イミュータブルなクラスを作成することはデータの安全性とプログラムの予測可能性を向上させる重要な手法です。イミュータブルなクラスとは、一度インスタンスが作成されたらその状態を変更できないクラスのことを指します。以下は、Javaでイミュータブルなクラスを作成するための基本的な手順です。
- フィールドをfinalにする:
クラス内のすべてのフィールドをfinal
修飾子で宣言します。これにより、フィールドへの再代入が不可能になります。
public class ImmutableClass {
private final String name;
private final int age;
public ImmutableClass(String name, int age) {
this.name = name;
this.age = age;
}
// ゲッターメソッドは通常通り実装
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
- クラスをfinalにする:
イミュータブルなクラス自体もfinal
修飾子で宣言します。これにより、クラスを継承して変更されることを防ぎます。
public final class ImmutableClass {
// フィールドやコンストラクタは前述の通り
}
- 変更可能なコレクションの防止:
イミュータブルなクラス内でコレクションを使用する場合、そのコレクション自体もイミュータブルであるか、変更不可能な形式で提供されるようにします。
public final class ImmutableClass {
private final List<String> immutableList;
public ImmutableClass(List<String> immutableList) {
// コピーを渡すことで外部からの変更を防ぐ
this.immutableList = Collections.unmodifiableList(new ArrayList<>(immutableList));
}
// ゲッターメソッドは通常通り実装
public List<String> getImmutableList() {
// コピーを返すことで外部からの変更を防ぐ
return Collections.unmodifiableList(new ArrayList<>(immutableList));
}
}
これらの手法を組み合わせることで、Javaでイミュータブルなクラスを作成することができます。イミュータブルなクラスはスレッドセーフであり、コードの理解や保守性を向上させるのに役立ちます。