Java运用心得(一)
来源:互联网 发布:苏州2.5产业园网络招聘 编辑:程序博客网 时间:2024/06/18 16:47
我们在项目开发中会用到非可变类,比如对于配置文件读取后生成的对象,比如一些常量生成的一个大对象,对于这类对象我们需要区别对待,把这类对象和一般类区分开来
实现非可变类需要遵循以下原则:
* 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实例而不是修改当前实例,大多数非可变类都可以这么实现。非可变对象是线程安全的,不需要要求同步。而且它可被自由的共享。所以此类做法可以配合享元模式使用。
从这里也看出设计重要性,在设计中就把这些对象分离出来,在后续开发中就会变得简单和有效了很多!
- Java运用心得(一)
- Java运用心得(二)
- JAVA心得(一)
- java入门心得(一)
- java代码编写菜鸟心得(一)
- java算法心得与技巧(一)
- 学习java的一点心得(一)
- STL的心得(4)--运用(MFC)
- CocosCreator运用(一)
- 学习java&xml心得(一)
- java实验一ATM心得
- 赶工心得(一)
- FastReport心得(一)
- JSF心得(一)
- Alternativa3D心得(一)
- FreeBSD心得(一)
- 工作心得(一)
- 股市心得(一)
- 基于Chrome开源提取的界面开发框架 三
- .NET实现之(简易ORM)
- distinct
- 驱动编程准备 配置内核树
- ExtJS——Grid实例
- Java运用心得(一)
- ADROID 2.2 语言定制
- Jquery插件jqplot使用小记
- Dalvik漫谈
- ZFS
- 学习UpdatePanel控件
- 系统调用与API(Application Programming Interface)的区别与联系
- MultiByte与Wide_Character的区别
- 给TextBox TextMode="password" 赋值后显示出来