Java运用心得(一)

本文介绍了非可变类的设计原则及其重要性,并通过一个简单的Java示例说明如何实现非可变类。非可变对象因其特性,在多线程环境下能确保线程安全且易于共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在项目开发中会用到非可变类,比如对于配置文件读取后生成的对象,比如一些常量生成的一个大对象,对于这类对象我们需要区别对待,把这类对象和一般类区分开来

实现非可变类需要遵循以下原则:

* 1.不提供修改对象方法
* 2.保证没有可被子类修改方法
* 3.使所有域都是final的
* 4.使所有域都是私有的
* 5.保证对所有可变组件的互斥访问

由于项目代码贴出会造成难以理解,所以写个简单例子证明即可:

package org.finalclass;

public final class Test {
private final float re;
private final float im;

public Test(float re,float im){
this.re=re;
this.im=re;
}
public float realPart(){
return re;
}
public float imaginaryPart(){
return im;
}
public Test add(Test c){
return new Test(re+c.re,im+c.im);
}


public Test subtract(Test c){
return new Test(re-c.re,im-c.im);
}

public Test multiply(Test c){
return new Test(re*c.re,im*c.im);
}

public Test divide(Test c){
return new Test(re/c.re,im/c.im);
}



@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Float.floatToIntBits(im);
result = prime * result + Float.floatToIntBits(re);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Test other = (Test) obj;
if (Float.floatToIntBits(im) != Float.floatToIntBits(other.im))
return false;
if (Float.floatToIntBits(re) != Float.floatToIntBits(other.re))
return false;
return true;
}
/**
* main
* @description:
* @param args
*/

public static void main(String[] args) {
// TODO Auto-generated method stub

}

}

这个类里的加减乘除都new一个新Test实例而不是修改当前实例,大多数非可变类都可以这么实现。非可变对象是线程安全的,不需要要求同步。而且它可被自由的共享。所以此类做法可以配合享元模式使用。

从这里也看出设计重要性,在设计中就把这些对象分离出来,在后续开发中就会变得简单和有效了很多!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值