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+

启动你的职业生涯

完成课程获得认证

开始学习
广告