创建不可变类的原则,java创建不可变对象
不可变类顾名思义就是这个类被实例化之后不可被重新赋值,java提供的八个包装类和java.lang.String都是不可变类。
创建自定义不可变类需要遵守的规则:
1、使用私人的和最后的修饰成员变量。
2、提供带参构造方法,用于初始化成员变量。
3、不要为成员变量提供作曲者方法。
4、如果成员变量中有可变类时需要重写目标中的散列码方法和等于方法。
爪哇岛视频教程推荐:java学习
例如:创建一个不可变的人类
公共类人员{
私有最终字符串名称;
私有最终字符串性别;
/*
* 无参构造方法
*/
公共人物(){
这个。名称="";
这个。性别=" ";
}
/*
* 有参构造方法
*/
公共人物(字符串名称,字符串性别){
这个名称=名称;
this.gender=性别;
}
公共字符串getName() {
返回名称;
}
公共字符串getGender() {
返回性别;
}
/*
* 重写散列码方法
*(非Javadoc)
* @see java.lang.Object#hashCode()
*/
@覆盖
public int hashCode() {
返回姓名。hashcode()性别。hashcode();
}
/*
* 重写等于方法
*(非Javadoc)
* @见Java。郎。object # equals(Java。郎。对象)
*/
@覆盖
公共布尔等于(对象对象){
如果(这==obj)
返回真实的
if(obj!=空对象。getclass()==this。getclass()){
Person pe=(人obj
if(this.getName().等于(pe.getName()) this.getGender().equals(pe.getGender()))
返回真实的
}
返回错误的
}以上这个人类中成员变量都是不可变类,如果其中有可变类,那么用以上的方法创建不可变类是有问题的,虽然人的属性是不可变的,但属性引用的对象是可变的,
这样就会使人的不可变性遭到破坏,例如如下例子。
先创建一个可变类大学
公立大学{
私有字符串科尔诺
私有字符串collName
公立学院(字符串学院号,字符串学院名){
super();
this.collNo=collNo
这个。coll name=coll name
}
公立学院(){
super();
}
公共字符串getCollNo() {
返回科尔诺
}
public void setCollNo(String collNo){
this.collNo=collNo
}
公共字符串getCollName() {
返回collName
}
公共空集合集合名称(字符串集合名称){
这个。coll name=coll name
}
@覆盖
公共字符串toString() {
返回College [collNo= collNo ,coll name= coll name ];
}在人中引用大学
公共类人员{
私立最终学院学院;
公共人物(){
this.college=null
}
公众人物(学院学院){
super();
this.college=学院;
}
公立学院getCollege() {
返回学院;
}
@覆盖
公共字符串toString() {
return Person[college= college ];
}
公共静态void main(String[] args){
学院=新学院( 123456 ,土木工程);
人员pe=新人(coll);
系统。出去。println(- PE);
coll.setCollName(信息工程);//这样就会改变人对象
系统。出去。println(====== PE);
}那么怎样才能创建有可变属性的不可变类呢?我们只要让程序无法访问到大学属性即可
公共类人员{
私立最终学院学院;
公共人物(){
this.college=null
}
公众人物(学院学院){
//创建一个和传入对象有相同属性的大学,赋值给成员变量
这个。学院=新学院(学院。getcollno()、学院。getcollname());
}
公立学院getCollege() {
//创建一个学院,将属性值赋给它并返回它
返回新学院(this.college.getCollNo()、this . College . getcollno());
}
@覆盖
公共字符串toString() {
return Person[college= college ];
}上面的思路是将外界与Person类中的变量属性的联系分开,程序不能直接作用于属性,从而创建一个类属性可变的不可变类。
相关文章教程推荐:java入门程序以上是java中不可变类及其创建规则的细节。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。