不可变的类是什么?

什么是不可变类?

不可变类是指,一旦一个类的对象被创建出来,在其整个生命周期中,它的成员变量就不能被修改
不可变类的所有数据域都是私有的,且没有对任何一个数据域提供公共的设置方法。一个类的所有数据域都是私有的且没有修改器并不意味着它一定是不可变类。
成为不可变类需要满足的条件有:
1:所有数据域都是私有的(private)
2:不对任何的成员变量提供改变值得方法(set/getter method)
3:确保所有得方法不会被重载,手段有两种,一种是使用(final class)强不可变类,另一种是在所有的类方法前加final
4:如果一个成员变量在初始化的时候没有私有化(private)那么在使用该成员变量的时候需要使用clone使其不可变
5:没有返回一个指向可变数据域的引用的访问器方法

例子:


final class InnerClass_date{
 
    private Date date;
    //构造方法
    public InnerClass_date(Date date){
        this.date = date;
    }
 
    public void printStr(){
        System.out.println("date : " + date);
    }
}

final class InnerClass_str{
 
    private String str;
    //构造方法
    public InnerClass_str(String str){
        this.str = str;
    }
 
    public void printStr(){
        System.out.println("str : " + str);
    }
}

final class InnerClass_date2{
 
    private Date date;
    //构造方法
    public InnerClass_date2(Date date){
        // 解除了引用关系,通过克隆,生成了一个新的对象
        this.date = (Date) date.clone();
    }
    public void printStr(){
        System.out.println("date : " + date);
    }
}

不可变类的优点

  • 易于构造、测试和使用
  • 天然线程安全、没有同步线程的问题
  • 不需要实现clone方法
  • 引用不可变类的实例时,不需要考虑实例的值会发生变化
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码的洋葱头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值