在 Java 中,不可变对象的所有属性是否都需要是 final 的?

java 8object oriented programmingprogramming

不可变类/对象是其值无法修改的类/对象。例如,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;
   }
}

相关文章