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