- 浏览: 285726 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 4547setTimeout不是真正意义上的延时函数,而且在表单提交后 ... -
ssh jar包配置
2009-11-27 11:31 2314本文中ssh指:struts2,srping2.5,hib ... -
每个项目中,你不得不知的11个Java第三方类库
2009-11-02 09:06 1119Java第三方library ecosystem是一个很广阔的 ... -
J2EE学习中一些值得研究的开源项目
2009-08-10 10:07 1175这篇文章写在我研究J2SE、J2EE近三年后。前3年 ... -
对JXL包的研究(java操作excel)
2009-06-25 07:44 1544对JXL包的研究(java操作excel) 在开源世界中,有两 ... -
java类中成员的装载顺序你知道吗
2009-04-03 08:18 1006最近去参加了SCJP培训,相信对于绝大多数的JAVA工作者来说 ... -
java操作word文件
2009-03-31 15:41 1732一个jacob操作Word的例子 import java. ... -
Java操作PDF文件(iText)
2009-03-31 15:32 5903然jacob中也有关于PDF的方法,但是过于复杂。iText是 ... -
java对excel操作
2009-03-31 15:11 1475从Excel文件读取数据表 Java Excel API既可 ... -
JAVA解析XML的四种方法
2009-03-31 08:49 1418XML现在已经成为一种通 ... -
Java:集合类性能分析
2009-03-20 20:41 19661.Java 集合框架图 -集合接口:6个接口(短虚 ... -
解决大批量数据导出Excel产生内存溢出的方案(二)
2009-03-11 10:42 6334客户要求一次导出20w行数据,这就要求导出的文件必须带shee ... -
解决大批量数据导出Excel产生内存溢出的方案
2009-03-11 10:41 5421POI或者JXL在导出大量数据的时候,由于它们将每一个单元格生 ... -
java语言的反射机制1
2009-03-11 10:23 1128java语言的反射机制为是java语言所提供的一项特别吸引人的 ... -
Java获取各种常用时间方法(二)
2009-03-11 09:43 1071//获得本年最后一天的日期 * ... -
Java获取各种常用时间方法
2009-03-11 09:40 1219本人之前做的项目中积累常用的时间方法,贴出来与大家共享,如果哪 ... -
JavaSE6.0 Web Service学习笔记(二)
2009-03-11 09:30 7411JavaSE6.0下的Web Service 从JavaSE6 ... -
JavaSE6.0 Web Service学习笔记(一)
2009-03-11 09:24 1442Web Service概述 Web Service ... -
JDK5.0 Annotation学习笔记(一)
2009-03-11 09:22 972背景知识: 从JDK5开始提供名为Annotat ... -
JasperReport报表设计总结(三)(已完毕)
2009-03-11 09:20 1400由于在一个里面不能贴太多的代码,故放置代码在此处。上接: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包加源码
Apache Commons Lang是Java编程语言中的一个实用工具库,它提供了许多在标准Java API中未涵盖的高级字符串和对象处理功能。这个"commons-lang-2.4.rar"压缩包包含了两个子文件,分别是"commons-lang-2.4-bin.zip"和...
在本例中,我们关注的是`commons-lang3-3.12.0.jar`包,这是Apache Commons Lang项目的最新版本。这个库包含了各种各样的工具类,涵盖了字符串操作、日期和时间处理、数学运算、类型转换等多个方面,极大地丰富了...
以下是压缩文件的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-lang-2.5 jar包和源码包
7. **commons-logging.jar-master.zip**:这个文件看起来像是Apache Commons Logging库的一个源码版本。Commons Logging是Java日志抽象层,它允许开发者在应用中使用不同的日志框架(如log4j、java.util.logging等)...
Apache Commons Lang 是一个 Java 类库,它为 Java SDK 增加了大量有用的实用工具类,弥补了标准库中的一些不足。"commons-lang3-3.0-bin.zip" 是 Apache Commons Lang 的第 3.0 版本的二进制分发包。这个压缩包包含...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
jar包和源码. Apache Commons包是Java中使用广泛的工具包,很多框架都依赖于这组工具包中的一部分,它提供了我们常用的一些编程需要,JDK没能提供的机能,最大化的减少重复代码的编写。 Commons Lang是对JDK中java....
6. **源码可用**:在提供的"commons-httpclient-3.0-sources.jar"中,包含了HttpClient 3.0的源代码,这对于开发者理解和调试代码,以及扩展和定制功能非常有帮助。 7. **与其他Apache Commons组件的集成**:...
这个"commons-lang-2.5-sources.jar"源码包包含了Lang项目2.5版本的所有源代码,这对于开发者来说是极其宝贵的资源,因为它允许深入理解内部实现,进行学习、调试或自定义修改。 在Lang库中,有许多关键知识点值得...
Apache Commons Lang是Apache软件基金会开发的一个Java类库,它提供了许多在Java标准库中未包含的实用工具类。"commons-lang3-3.9-tar"是一个压缩包,包含了Lang项目版本3.9的源码和相关文件。这个库特别受欢迎,...
json应用jar包,json应用的...commons-collections-3.2.jar commons-lang-2.4.jar commons-logging-1.1.jar ezmorph-1.0.4.jar json-lib-2.2.2-jdk15.jar json应用jar包,json应用的架包:commons-beanutils-1.7.0.jar
在标签中提到了"commons.lang jar包",这表明了这个资源包的核心是`commons-lang.jar`,在更现代的版本中,它演变成了`commons-lang3.jar`,如文件名称列表所示的`commons-lang3-3.7`。这个版本号表示这是Apache ...
通过深入学习和理解Apache Commons Lang 3.5的源码,开发者可以学习到优秀的编程实践,提升代码质量和效率。源码阅读不仅有助于理解这些工具类的内部工作原理,也有助于我们借鉴和应用到自己的项目中,提升代码的可...
跟java.lang这个包的作用类似,Commons Lang这一组API也是提供一些基础的、通用的操作和处理,如自动生成toString()的结果、自动实现hashCode()和equals()方法、数组操作、枚举、日期和时间的处理等等。
在这个"commons-lang-3-3.1"版本中,我们找到了一个jar包和源码包,这些都是开发者们进行程序开发的重要资源。这个版本是Lang项目的第3版,第3.1次更新,提供了许多对Java基础类库的补充和优化。 Lang项目提供了一...
commons-lang-2.3的源码包,在ide里面直接连接该资源,就可以查看源代码。
《Apache Commons Lang 3.3.2:源码解析与应用探索》 Apache Commons Lang 是一个Java编程语言的实用工具库,它提供了大量的类和方法来扩展Java的标准库。在这个压缩包"commons-lang3-3.3.2.rar"中,我们主要关注的...
Commons BeanUtils Most Java developers are used to creating Java classes that conform to the JavaBeans naming patterns for property getters and setters. It is natural to then access these methods ...