创建一个不可变类

package com.siyu.model.others;

/**
 * String是不可变类
 * 怎样实现一个不可变类?
 * 不可变类可以解决什么问题:解决线程安全的问题
 *
 * 1:类定义为final,保证类不被继承
 * 2: 确保所有变量被private修饰,保证不能被外部访问到
 * 3: 不提供改变成员变量的方法,如set
 * 4: 对于类中的非不可变成员,在使用get方法返回成员变量时,返回成员的深拷贝,保证解除引用关系,基本变量除外
 * 5: 通过构造方法初始化时候,对于引用类型,要通过对参数的深拷贝进行成员变量的赋值操作,不能简单的赋值
 */
public final class ImmutableClass {


    // private 修饰
    private int[] array;

    public ImmutableClass(int[] array) {
        // 构造采用深拷贝
        this.array = array.clone();
    }

    public int[] getArray() {
        // 返回成员变量的拷贝,解除引用关系,不提供set
        return array.clone();
    }
    
}

posted @ 2021-12-16 15:39  姚狗蛋  阅读(22)  评论(0编辑  收藏  举报