English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

不可变对象的所有属性都需要在Java中是最终的吗?

不可变的类/对象是不能更改其值的类/对象。例如,字符串在Java中是不可变的,即,一旦在Java中创建了字符串值,便无法对其进行修改。即使您尝试修改,也会使用修改后的值创建中间字符串,并将其分配给原始文字。

定义不可变对象

每当需要创建在初始化后无法更改的对象时,都可以定义不可变对象。没有创建不可变对象的特定规则,其思想是在初始化后限制对类字段的访问。

示例

以下Java程序演示了最终类的创建。这里,我们有两个实例变量名称和年龄,除了不能为它们分配值的构造函数。

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

不,并非所有属性都必须具有最终属性才能创建不可变对象。在不可变对象中,您不应允许用户修改类的变量。

您可以通过将变量设置为私有而不提供设置方法来修改它们来做到这一点。

示例

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;
   }
}