Java不可变对象
来源:互联网 发布:大乐网络代理什么游戏 编辑:程序博客网 时间:2024/05/20 04:28
一、不可变类简介
不可变类:所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。如JDK内部自带的很多不可变类:Interger、Long和String等。
可变类:相对于不可变类,可变类创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变类。
下面的理解可能会易懂一些:
概念:不可变类的意思是创建该类的实例后,该实例的属性是不可改变的。Java中的8个包装类和String类都是不可变类。所以不可变类并不是指该类是被final修饰的,而是指该类的属性是被final修饰的。
自定义不可变类遵守如下原则:
1、使用private和final修饰符来修饰该类的属性。
2、提供带参数的构造器,用于根据传入的参数来初始化属性。
3、仅为该类属性提供getter方法,不要提供setter方法。
4、如果有必要,重写hashCode和equals方法,同时应保证两个用equals方法判断为相等的对象,其hashCode也应相等。
二、不可变类的优点
说完可变类和不可变类的区别,我们需要进一步了解为什么要有不可变类?这样的特性对Java来说带来怎样的好处?
- 1
- 2
- 3
- 4
三、不可变类的设计方法
类添加final修饰符,保证类不被继承。
如果类可以被继承会破坏类的不可变性机制,只要继承类覆盖父类的方法并且继承类可以改变成员变量值,那么一旦子类以父类的形式出现时,不能保证当前类是否可变。保证所有成员变量必须私有,并且加上final修饰
通过这种方式保证成员变量不可改变。但只做到这一步还不够,因为如果是对象成员变量有可能再外部改变其值。所以第4点弥补这个不足。不提供改变成员变量的方法,包括setter
避免通过其他接口改变成员变量的值,破坏不可变特性。
- Java 不可变对象
- java 不可变对象
- Java不可变对象
- Java不可变对象
- Java不可变对象
- java 不可变对象
- Java不可变对象
- java不可变对象
- Java不可变对象
- JAVA String 不可变对象
- JAVA 可变对象,不可变对象
- 并发---不可变对象(java tutorial翻译)
- 为什么Java字符串是不可变对象?
- 为什么Java字符串是不可变对象
- 为什么Java字符串是不可变对象?
- java中不可变对象(Immutable)
- 为什么Java字符串是不可变对象?
- 为什么Java字符串是不可变对象?
- java Date常用转换
- 用python写一个菱形
- Java面试题
- Markdown系列(2)- 特点
- Ubuntun安装paramiko
- Java不可变对象
- django-rest-framework介绍
- 文章储备待研究-收集
- 操作系统 (Po学校 计算机科学 笔记整理)
- python3 请求RESTful接口
- 细数那些能让人惊喜的windows技巧
- map的遍历的4种方法
- TortoiseGit安装与配置
- 算法及数据结构之---链表