imutableとは
immutableとは不変のこと。
つまり、immutableなクラスとはインスタンスの中身が変わらない(=書き換えられない)クラスのことです。
immudatableなクラスを書き換えるということは、インスタンスを再生産するということになります(繰り返し処理の中で何度もインスタンスが作られると古いインスタンスが溜まっていき、処理速度が遅くなるため、使い方は注意しないといけません)。immutableなクラスを利用する時には、中身を変更してないか、参照型の値を利用してないか等、確認する必要があります。
immutableのメリット
immutableなオブジェクトは、作成時から状態が変わらないため、処理の途中で意図しない形に値が変化する心配はありません。
immutableなクラスで代表的なものに、Stringクラスがあります。
作成時の条件
immutableなクラスを作るには、以下の4つの条件を満たす必要があります。
1.クラスをfinalとして宣言
2.すべてのフィールドをfinalかつprivateにする
クラスをfinalとして宣言、またはコンストラクタをプライベートにして、ファクトリメソッドでインスタンス生成
3.setterを定義しない
クラスをfinalとして宣言、またはコンストラクタをプライベートにして、ファクトリメソッドでインスタンス生成
4.フィールドにmmutable(可変)なオブジェクトへの参照を含んでいない
Fruits.java
public final class Fruits {
private final String color;
private final int amount;
public Fruits(String name, String, int age) {
this.name = color;
this.age = amount;
}
public String getColor() {
return color;
}
public int getAmount() {
return amount;
}
}
変更しようとするとエラーになります。
FruitsTest.java
@Test
public void fruitsTest() {
final Person Fruits = new Fruits("Red", 28);
// error
// fruits.setColor("yellow");
// fruits.amount(30);
}