什么是 Java 中的不可变类?

在 Java 中,不可变类(Immutable Class)是指一旦创建后其状态就不能被修改的类。不可变类具有以下特点:

  1. 对象的状态不能改变:一旦对象被创建,其内部状态就不能被修改。所有的字段都是 final 类型,确保它们在初始化后不能被改变。
  2. 线程安全:由于对象的状态不能改变,因此不可变类是线程安全的,可以在多线程环境中安全地共享,而不需要额外的同步措施。
  3. 简化编程模型:不可变对象可以避免许多与状态变化相关的复杂性,如并发问题、副作用等。
  4. 缓存和哈希码:由于对象的状态不会改变,可以安全地缓存计算结果,如哈希码,从而提高性能。

创建不可变类的步骤

  1. 使类声明为 final:防止其他类继承并修改其状态。
  2. 使所有字段声明为 final:确保字段在初始化后不能被修改。
  3. 提供构造函数:在构造函数中初始化所有字段,并且不提供任何修改状态的方法。
  4. 确保对可变对象的防御性拷贝:如果类包含引用类型字段,确保这些字段指向的对象也是不可变的,或者在返回时进行防御性拷贝。

示例代码

public final class ImmutableClass {
    private final String name;
    private final int age;

    // 构造函数
    public ImmutableClass(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 提供 getter 方法,但不提供 setter 方法
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    // 重写 equals 和 hashCode 方法
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        ImmutableClass that = (ImmutableClass) obj;
        return age == that.age && name.equals(that.name);
    }

    @Override
    public int hashCode() {
        int result = name.hashCode();
        result = 31 * result + age;
        return result;
    }
}

#java面试题#
全部评论
点赞 回复 分享
发布于 01-27 18:40 黑龙江

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务