不可变类(Immutable Class)是指对象一旦创建,其状态(成员属性)就不能被修改的类。
在 Java 等语言中,不可变类有非常明确的设计特点和用途。
通常做法是:
final 修饰public final class Person {
}
否则子类可能通过重写方法改变行为。
private 和 finalprivate:防止外部直接访问final:保证变量只会被赋值一次private final String name;
private final int age;
只提供 getter(或干脆不提供),不提供任何能修改属性的方法。
public String getName() {
return name;
}
对象的状态只能在创建时确定。
public Person(String name, int age) {
this.name = name;
this.age = age;
}
这是最容易出错的一点。
❌ 错误示例:
private final Date birthDate;
public Date getBirthDate() {
return birthDate; // 外部可修改 Date
}
✅ 正确做法:
public Date getBirthDate() {
return new Date(birthDate.getTime());
}
传入和返回可变对象时都要拷贝。
✅ 线程安全
✅ 安全可控
✅ 适合作为 Map 的 key、Set 的元素
✅ 易于缓存和复用
String、Integer 常量池❌ 频繁创建对象
❌ 对性能敏感场景不友好
StringInteger、Long 等包装类BigDecimalLocalDate、LocalDateTimepublic final class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
不可变类的核心特点:状态不可变、无 setter、类不可继承、属性 final、必要时进行防御性拷贝。
如果你愿意,我也可以对比 不可变类 vs 可变类,或者结合 String 为什么是不可变的 来讲。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。