注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

星期五

明天不上班

 
 
 

日志

 
 
关于我

一个特立独行的Java程序员,比较宅,上上网,写博客,听音乐,看电影。

网易考拉推荐

Jakarta commons cookbook 笔记(1)  

2013-02-28 19:22:13|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
自动生成toString()方法,这里不是Eclipse自动生成的toString,而是commons库中提供的有意思的方法实现的:

1.自动生成toString()方法
使用Commons Lang的ReflectionToStringBuilder或ToStringBuilder,配合ToStringBuilder可生成toString方法。
下面代码显示如何使用反射生成器生成toString()方法

import org.apache.commons.lang.builder.ReflectionToStringBuilder;
public String toString() {
return ReflectionToStringBuilder.toString(this);
}

这样依靠反射生产toString方法,减少我们维护的成本。

package com.lang.test.first;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
public class Student {
private String firstName;
private String lastName;
private int age;
private int level;
private String parentName;
private String phoneNumber;

public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public String getParentName() {
return parentName;
}
public void setParentName(String parentName) {
this.parentName = parentName;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}

public String toString() {
return ReflectionToStringBuilder.toString(this);
}


}

测试

package com.lang.test.first;

public class ToStringBuilderTest {

public static void main(String[] args) {
// TODO Auto-generated method stub
Student st1 = new Student();
st1.setFirstName("Hao Ju");
st1.setLastName("Zheng");
st1.setLevel(7);
st1.setAge(26);
st1.setPhoneNumber("124564657498");
System.out.println(st1);
}

}

结果:

com.lang.test.first.Student@50a649[firstName=Hao Ju,lastName=Zheng,age=26,level=7,parentName=<null>,phoneNumber=124564657498]

一个对象有太多的属性 或当属性含有大量文本时,就不便于使用ReflectionToStringBuilder

2.自定义toString()内容
可以通过ToStringBuilder 和 ToStringStyle定制toString输出,就可以定制样式和输出

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("lastName", lastName).append("level", level).toString();
}

结果:

com.lang.test.first.Student1@9444d1[
lastName=Zheng
level=7
]

总结:
通过append方法定制toString方法内容
通过ToStringStyle定制样式

3.自定义toString的五种样式:
ToStringStyle.MULTI_LINE_STYLE
com.lang.test.first.Student1@9444d1[
  lastName=Zheng
  level=7
]

ToStringStyle.DEFAULT_STYLE
com.lang.test.first.Student1@32060c[lastName=Zheng,level=7]

ToStringStyle.NO_FIELD_NAMES_STYLE
com.lang.test.first.Student1@9444d1[Zheng,7]

ToStringStyle.SHORT_PREFIX_STYLE
Student1[lastName=Zheng,level=7]

ToStringStyle.SIMPLE_STYLE
Zheng,7

  评论这张
 
阅读(234)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017