您的位置:首页 > 其它

Jakarta Commons Cookbook书摘

2013-03-03 15:02 246 查看
阅读该书时,才发现,平时一些很费劲的代码,通过Apache.common的 工具包,可以得到很大的简化。下面以问题、平时做法,推荐做法(调用common这个包来实现)来做记录

问题 1

实现toString方法,输出bean的各个属性值

平时做法

属性名+get方法,例如 "name:" + bean.getName + ";value:" + bean.getValue

推荐做法

问题 2

在方法一开始,要判断参数是否为空

平时做法

自己写代码做判断以及异常的处理,例如

推荐做法

使用Validate类,例如

Validate.notEmpty(para, "para must not be empty"),当para为empty时,会往外抛出异常

问题 3

计算方法执行时间

平时做法

推荐做法

使用StopWatch,简单的情况下,这两种方法没太大区别,但当你的计算场景越复杂,StopWatch,可以让代码更清晰,更灵活些

问题 4

需要对文本进行处理

平时做法

自己写方法,以下省略血泪史四千字……

推荐做法

醒醒吧!!StringUtils 基本都帮你做了!

检查空字符串,isBlank()

缩减字符串,abbreviate()

搜索嵌套字符串串,substringBetween()

去掉字符串尾部的换行符和回车符, chomp()

……总之,基本没你什么事,直接用吧。。

问题 5

需要一组数据根据多个排序条件进行排序,且该数据不是来源于数据库,因此只能在程序中进行排序

平时做法

自己写comparator,而且要根据多个条件进行排序,因此comparator里面,就要if后又if,把自己都给绕晕了

推荐做法

将两个东西组到一起,就可以方便地解决问题:1、beanutil所带的BeanComparator,可以进行基本的排序,例如字符串默认按A-Z正序排序,数字默认按从小到大排序;2、ComparatorChain,可以把多个Comparator组到一起,按添加的先后顺序,进行排序,例如如果通过第一个comparator对比时,两者相同,则再用下一个comparator进行对比。例子如下:

问题 6

需要关闭各种流(InputStream等)

平时做法

在finally块中关闭流。但为防止close方法抛出异常,需要再包一层try/catch。例如

推荐做法

同样还是在finally块中关闭流,但可以通过

IOUtils.closeQuietly(inStream)

一行代码来解决上面五行代码做的事情(1、前提是你不用对catch到的异常做处理;2、这个方法的实现,其实就是那五行代码。)

问题 7

有一组数据,作为一个值写到了配置文件中,之后需要再读出来,还原成一组数据

配置文件可能像这样:macToImport = iPhone1,iPhone2,iPhone3。

平时做法

小组有人封装过读取配置文件的工具类,但读出来的值都为String类型的。例如我只能读到“iPhone1,iPhone2,iPhone3”,然后我再用spilt(",")把这个str转换成list

推荐做法

通过Configuration类的getList方法。

例如:

Configuration config = new PropertiesConfiguration("test.properties");

List names = config.getList("names");

问题 8

需要统计list中,有多少个元素满足给定条件

平时做法

//伪代码

int num = 0;

for(bean:list)

{

if(某个条件)

{

keum ++;

}

}

推荐做法

使用CollectionUtils.countMatches(list,Predicate);

问题 9

页面的表单(form)提交到后台,后台收到值后,根据值类型的不同,需做不同的处理,再填到一个bean中

平时做法


//如果表单提交的值和dbVersionInfo中的对应值不一样,则将表单值设到dbVersionInfo中
if(!copyRight.equals(dbVersionInfo.getCopyRight()))
{
	dbVersionInfo.setCopyRight(copyRight);
}
if(!firstName.equals(dbVersionInfo.getFirstName()))
{
	dbVersionInfo.setFirstName(firstName);
}


推荐做法

先定义方法

private void isValueModify(VersionDetailInfo dbVersionInfo, String valueInput, String name) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException
{

		if(null != valueInput && !valueInput.equals(BeanUtils.getProperty(dbVersionInfo, name)))
		{
			BeanUtils.setProperty(dbVersionInfo, name, valueInput);
			valueChange ++;
		}

}


isValueModify(dbVersionInfo, copyRight, "copyRight");
isValueModify(dbVersionInfo,firstName, "firstName");


注意使用该方法必须有一个前提,你的数据bean(如本例中的VersionDetailInfo)需要按照java bean的定义,有set和get方法,例如你的bean中有copyRight这个属性,那也要有setCopyRight和getCopyRight这两个方法,然后BeanUtils.getProperty中的参数name就是"copyRight"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: