如何创建一个不可变类

Posted 黑面书生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建一个不可变类相关的知识,希望对你有一定的参考价值。

1 不可变类的5大特征

  • 类不能被继承,方法不能被子类覆写,所以类或者方法定义为final
  • 保证成员变量不被外部访问,所以private修饰
  • 不提供set方法
  • 对于类中可变成员,get方法返回的是对象的拷贝,解除引用关
  • 通过构造方法初始化成员变量,如果成员变量是非可变类型,一般指的是引用类型,则不能直接赋值,要通过深拷贝后再赋值

2 创建一个不可变类

package Collection;

public final class NoChangeClass {
    private int[] arr;
    public NoChangeClass(int[] array){
        this.arr = array.clone();
    }
    public int[] getArr(){
        return arr.clone();
    }
}

3 不可变类的测试

package Collection;

public class Test4 {
    public static void main(String[] args) {
        int[] arr = {4,5,6,7};
        NoChangeClass instance = new NoChangeClass(arr);
        arr[0] = 88;
        int[] arr1 = instance.getArr();
        for (int i:arr1
             ) {
            System.out.println(i);  // 4,5,6,7
        }
    }
}

以上是关于如何创建一个不可变类的主要内容,如果未能解决你的问题,请参考以下文章

Java 不可变类

如何创建一个完全不可变的树层次结构?建筑鸡和蛋

如何使用装饰器修改可变类变量?

Java中常用不可变类

在创建VSCode片段时,如何将变量转换为title-case(如TitleCase)?

Scala中string对象是可变还是不可变?加入要创建一个可以修改得字符串,应该是那个类