不可变对象一旦创建其状态无法修改,需通过声明类为final、字段为private final、不提供setter、对可变成员深拷贝等方式实现,确保线程安全、简化并发编程、支持缓存与函数式风格。
Ja
va中不可变对象是指一旦创建后,其状态(即成员变量的值)就不能被修改的对象。实现不可变对象需要遵循一系列设计原则,以确保对象的状态在生命周期内保持不变。
要正确实现一个不可变类,通常需要满足以下几个条件:
public final class Person {
private final String name;
private final int age;
private final List hobbies;
public Person(String name, int age, List hobbies) {
this.name = name;
this.age = age;
// 对可变集合进行深拷贝
this.hobbies = new ArrayList<>(hobbies);
}
public String getName() { return name; }
public int getAge() { return age; }
// 返回副本,防止外部修改内部list
public List getHobbies() {
return new ArrayList<>(hobbies);
}
}
不可变对象在程序设计中具有多个重要优势,尤其在并发编程和API设计中表现突出:
基本上就这些。只要在设计类时明确是否需要状态变化,合理应用不可变模式,就能写出更安全、清晰的Java代码。