Java 中不可變物件的屬性是否都需要宣告為 final?


不可變類/物件的值不能被修改。例如,Java 中的字串是不可變的,也就是說,一旦你在 Java 中建立了一個字串值,你就不能修改它。即使你試圖修改,也會建立一個包含修改值的中介字串,並將其賦值給原始字面量。

定義不可變物件

每當你需要建立一個初始化後不能更改的物件時,你可以定義一個不可變物件。建立不可變物件沒有特定的規則,其思想是在初始化後限制對類欄位的訪問。

示例

下面的 Java 程式演示瞭如何建立一個 final 類。這裡,我們有兩個例項變數 name 和 age,除了建構函式之外,你不能為它們賦值。

final public class Student {
   private final String name;
   private final int age;
   public Student(String name, int age){
      this.name = name;
      this.age = age;
   }
   public String getName() {
      return this.name;
   }
   public int getAge() {
      return this.age;
   }
   public static void main(String[] args){
      Student std = new Student("Krishna", 29);
      System.out.println(std.getName());
      System.out.println(std.getAge());
   }
}

輸出

Krishna
29

是否必須宣告所有變數為 final?

不,並非必須將所有屬性宣告為 final 才能建立不可變物件。在不可變物件中,你應該不允許使用者修改類的變數。

你可以透過將變數設為私有並且不提供 setter 方法來修改它們來做到這一點。

示例

public class Sample{
   String name;
   int age;
   public Sample(){
      this.name = name;
      this.age = age;
   }
   public String getName(){
      return this.name;
   }
   public int getAge(){
      return this.age;
   }
}

更新於:2020年7月2日

瀏覽量:1K+

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告