- 浏览: 281705 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
jim8757:
能提供下完整的代码吗?
实例解析java + jQuery + json工作过程(登录) -
befairy:
收藏,谢谢LZ
基于Java、jQuery应用的账务管理系统开源了(09.3.19更新) -
Gilbert_Sam:
我看过这本书,很好,看到二十几章的地方,结果网站就登陆不上,写 ...
Linux C编程一站式学习 http://learn.akae.cn/ -
ljy520zhiyong:
这个网址进入不了呀
Linux C编程一站式学习 http://learn.akae.cn/ -
蜀山红日:
如果后台要向前台返回复杂数据该怎么办呢
实例解析java + jQuery + json工作过程(登录)
通常,我们在完成一个标准的JavaBean的时候,都需要同时完成equals,toString和hashCode三个方法,一般手动来写的话,实在是很麻烦,特别是如果一个JavaBean中有复杂的数据类型,如集合类型,日期类型等这种情况下,做起来更让人头痛。
于是我用了common-lang.jar这个包里面的一些类来帮我做这三个令人厌烦的工作,比如我现在有一个简单JavaBean,代码如下:
- public class GenericModel implements Serializable {
- private static final long serialVersionUID = 3294254521331173014L;
- protected String id;
- protected Date createTime;
- protected Date updateTime;
- public Date getCreateTime() {
- return createTime;
- }
- public void setCreateTime(Date createTime) {
- this.createTime = createTime;
- }
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public Date getUpdateTime() {
- return updateTime;
- }
- public void setUpdateTime(Date updateTime) {
- this.updateTime = updateTime;
- }
- public boolean equals(Object object) {
- return EqualsBuilder.reflectionEquals(this, object);
- }
- }
public class GenericModel implements Serializable { private static final long serialVersionUID = 3294254521331173014L; protected String id; protected Date createTime; protected Date updateTime; public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public String getId() { return id; } public void setId(String id) { this.id = id; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } public boolean equals(Object object) { return EqualsBuilder.reflectionEquals(this, object); } }
以上是一个很简单的POJO,要用commons-lang.jar里面的builder来生成这三个方法也很简单,具体做法如下。
1. 生成对应的equals方法:
- public boolean equals(Object obj){
- if (obj == null) {return false;}
- if (obj == this) {return true;}
- if (obj.getClass() != getClass()) {return false;}
- GenericModel gm= (GenericModel) obj;
- return new EqualsBuilder()
- .append(id, gm.getId())
- .append(createTime , gm.getCreateTime())
- .append(updateTime, gm.getUpdateTime())
- .isEquals();
- }
public boolean equals(Object obj){ if (obj == null) {return false;} if (obj == this) {return true;} if (obj.getClass() != getClass()) {return false;} GenericModel gm= (GenericModel) obj; return new EqualsBuilder() .append(id, gm.getId()) .append(createTime , gm.getCreateTime()) .append(updateTime, gm.getUpdateTime()) .isEquals(); }
2. 生成对应的hashCode方法:
- public int hashCode() {
- return new HashCodeBuilder(17, 37)
- .append(id)
- .append(createTime)
- .append(updateTime)
- .toHashCode();
- }
public int hashCode() { return new HashCodeBuilder(17, 37) .append(id) .append(createTime) .append(updateTime) .toHashCode(); }
注意使用HashCodeBuilder的时候,构造方法的两个整数必须不为零且必须为奇数,HashCodeBuilder的构造函数如下:
- public HashCodeBuilder(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber) {
- if (initialNonZeroOddNumber == 0) {
- throw new IllegalArgumentException("HashCodeBuilder requires a non zero initial value");
- }
- if (initialNonZeroOddNumber % 2 == 0) {
- throw new IllegalArgumentException("HashCodeBuilder requires an odd initial value");
- }
- if (multiplierNonZeroOddNumber == 0) {
- throw new IllegalArgumentException("HashCodeBuilder requires a non zero multiplier");
- }
- if (multiplierNonZeroOddNumber % 2 == 0) {
- throw new IllegalArgumentException("HashCodeBuilder requires an odd multiplier");
- }
- iConstant = multiplierNonZeroOddNumber;
- iTotal = initialNonZeroOddNumber;
- }
public HashCodeBuilder(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber) { if (initialNonZeroOddNumber == 0) { throw new IllegalArgumentException("HashCodeBuilder requires a non zero initial value"); } if (initialNonZeroOddNumber % 2 == 0) { throw new IllegalArgumentException("HashCodeBuilder requires an odd initial value"); } if (multiplierNonZeroOddNumber == 0) { throw new IllegalArgumentException("HashCodeBuilder requires a non zero multiplier"); } if (multiplierNonZeroOddNumber % 2 == 0) { throw new IllegalArgumentException("HashCodeBuilder requires an odd multiplier"); } iConstant = multiplierNonZeroOddNumber; iTotal = initialNonZeroOddNumber; }
3. 生成toString方法:
- public String toString() {
- return new ToStringBuilder(this)
- .append("id", id)
- .append("createTime", createTime)
- .append("updateTime", updateTime)
- .toString();
- }
public String toString() { return new ToStringBuilder(this) .append("id", id) .append("createTime", createTime) .append("updateTime", updateTime) .toString(); }
好了,这也是一般我们用这个玩意儿的用法,但即使这种情况,我们仍然需要手动维护如此多的属性,有没有一种方式更加简单,可以让代码更简化呢?
有的,再看这几个类里面有这几个方法:
EqualsBuilder.reflectionEquals
HashCodeBuilder.reflectionHashCode
ToStringBuilder.reflectionToString
这几个方法是利用Java的反射机制,自动找到相应的属性,自动生成这几个方法。好了上面的代码就可以改一下了:
- public boolean equals(Object object) {
- return EqualsBuilder.reflectionEquals(this, object);
- }
- public int hashCode(){
- return HashCodeBuilder.reflectionHashCode(this);
- }
- public String toString(){
- return ToStringBuilder.reflectionToString(this);
- }
public boolean equals(Object object) { return EqualsBuilder.reflectionEquals(this, object); } public int hashCode(){ return HashCodeBuilder.reflectionHashCode(this); } public String toString(){ return ToStringBuilder.reflectionToString(this); }
好了,这样看上去就好多了。接下来再多说几句多余的。也是这三个方法的实用价值所在。
我们一般在进行建模的时候,所有的域对象一般都会有一个基类,我上面这个GenericModel也就是一个基类,那么我们项目中的所有域对象都继承自这个基类。同时也就继承了这三个方法。也就是,只要我们新的JavaBean都扩展了GenericModel这个类,那么在我们的新的JavaBean里面就不再需要声明这三个方法,这三个方法自动实现了。
- piktang.zip (739.9 KB)
- 下载次数: 20
发表评论
-
自定义js延时函数
2010-03-26 11:38 4481setTimeout不是真正意义上的延时函数,而且在表单提交后 ... -
ssh jar包配置
2009-11-27 11:31 2273本文中ssh指:struts2,srping2.5,hib ... -
每个项目中,你不得不知的11个Java第三方类库
2009-11-02 09:06 1078Java第三方library ecosystem是一个很广阔的 ... -
J2EE学习中一些值得研究的开源项目
2009-08-10 10:07 1149这篇文章写在我研究J2SE、J2EE近三年后。前3年 ... -
对JXL包的研究(java操作excel)
2009-06-25 07:44 1502对JXL包的研究(java操作excel) 在开源世界中,有两 ... -
java类中成员的装载顺序你知道吗
2009-04-03 08:18 975最近去参加了SCJP培训,相信对于绝大多数的JAVA工作者来说 ... -
java操作word文件
2009-03-31 15:41 1686一个jacob操作Word的例子 import java. ... -
Java操作PDF文件(iText)
2009-03-31 15:32 5854然jacob中也有关于PDF的方法,但是过于复杂。iText是 ... -
java对excel操作
2009-03-31 15:11 1443从Excel文件读取数据表 Java Excel API既可 ... -
JAVA解析XML的四种方法
2009-03-31 08:49 1392XML现在已经成为一种通 ... -
Java:集合类性能分析
2009-03-20 20:41 19271.Java 集合框架图 -集合接口:6个接口(短虚 ... -
解决大批量数据导出Excel产生内存溢出的方案(二)
2009-03-11 10:42 6295客户要求一次导出20w行数据,这就要求导出的文件必须带shee ... -
解决大批量数据导出Excel产生内存溢出的方案
2009-03-11 10:41 5393POI或者JXL在导出大量数据的时候,由于它们将每一个单元格生 ... -
java语言的反射机制1
2009-03-11 10:23 1090java语言的反射机制为是java语言所提供的一项特别吸引人的 ... -
Java获取各种常用时间方法(二)
2009-03-11 09:43 1024//获得本年最后一天的日期 * ... -
Java获取各种常用时间方法
2009-03-11 09:40 1182本人之前做的项目中积累常用的时间方法,贴出来与大家共享,如果哪 ... -
JavaSE6.0 Web Service学习笔记(二)
2009-03-11 09:30 7377JavaSE6.0下的Web Service 从JavaSE6 ... -
JavaSE6.0 Web Service学习笔记(一)
2009-03-11 09:24 1407Web Service概述 Web Service ... -
JDK5.0 Annotation学习笔记(一)
2009-03-11 09:22 938背景知识: 从JDK5开始提供名为Annotat ... -
JasperReport报表设计总结(三)(已完毕)
2009-03-11 09:20 1361由于在一个里面不能贴太多的代码,故放置代码在此处。上接:htt ...
相关推荐
commons-lang-2.6.jar包commons-lang-2.6.jar包commons-lang-2.6.jar包commons-lang-2.6.jar包commons-lang-2.6.jar包加源码
jar包大小:239KB commons-lang-2.3.jar jar包大小:237KB commons-lang-2.2.jar jar包大小:202KB commons-lang-2.1.jar jar包大小:165KB commons-lang-2.0.jar jar包大小:278KB commons-jxpath-1.2.jar jar包大小:129...
commons-lang-2.4.rar代码及jar文件
commons-lang-2.5-sources.jar源码包
以下是压缩文件的jar包名称: commons-validator-1.3.0.jar commons-pool-1.3.jar commons-net-3.0.jar commons-logging-api-1.1.jar commons-logging-1.0.4.jar commons-lang-2.1.jar commons-io-1.3.2.jar commons...
( commons-lang3-3.5源码与jar包
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
commons-lang-2.5 jar包和源码包
commons-lang3-3.3.2.rar jar包 src源码
commons-lang-3-3.1 jar包和源码包
跟java.lang这个包的作用类似,Commons Lang这一组API也是提供一些基础的、通用的操作和处理,如自动生成toString()的结果、自动实现hashCode()和equals()方法、数组操作、枚举、日期和时间的处理等等。
jar包和源码. Apache Commons包是Java中使用广泛的工具包,很多框架都依赖于这组工具包中的一部分,它提供了我们常用的一些编程需要,JDK没能提供的机能,最大化的减少重复代码的编写。 Commons Lang是对JDK中java....
jedis-2.9.0 jar 包,不包含源码,源码下载地址: http://download.csdn.net/download/tan3739/9993938 测试代码: 导入依赖包: commons-lang-2.5.jar commons-pool2-2.4.2.jar jedis-2.9.0 jar public static ...
commons-lang-2.6-bin.rar commons-lang-2.6 jar包,源码,文档
Apache Commons Lang资源包,下载解压缩后,可获得api文档,源码,jar包,用于开发
commons-lang3-3.3.1.rar jar包 src源码 maven
Apache Commons Lang提供了这些额外的方法。 Lang为java.lang API提供了大量的辅助工具,特别是字符串操作方法,基本数值方法,对象反射,并发性,创建和序列化以及系统属性。此外,它还包含对java.util.Date的基本...
(附件中提供了该工具包的jar包,及源文件以供研究) BeanUtils Commons-BeanUtils 提供对 Java 反射和自省API的包装 Betwixt Betwixt提供将 JavaBean 映射至 XML 文档,以及相反映射的服务. Chain Chain 提供...
里面包括要使用 json-lib 所要用到的所有包。另外还有 json-lib 的源码。可以在 eclipse 里查看源码。 commons-logging.jar commons-lang.jar commons-beanutil.jar commons-collections.jar ezmorph.jar
官网发布的json-lib-2.4-jdk...本jar包经过改造,适用于JDK1.4,需要第三方JAR包的支持(commons-beanutils-1.8.2.jar,commons-collections-3.2.jar,commons-lang-2.5.jar,commons-logging-1.1.jar,ezmorph-1.0.6.jar)