分享
 
 
 

管窥Commons

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

我最感兴趣的是String Util类、StringUtils、RandomStringUtils和CharSetUtils。他们是String Taglib的主干部分,也是我花功夫最多的类。自然,我觉得它们非常有用,每天都在用他们。关于StringUtils类最值得关注的特性如下:

capitalise(String):一个String大写化函数(这里保留了英式拼法),它不像大多数字符串库那样使用toUpperCase,而是恰当地使用了toTitleCase。

join(Object[], String):它把对象数组里每个对象的toString合并成带有指定定界符的单个String。所以join( {"A","B",C"}, ";")的结果是"A;B;C"。Iterator也可以被连接。

split(String, String):它能分割带有定界符的文本。其功能没有StringTokenizer(它不能一次处理多组定界符)强大,但是能够很快、很容易地应用于很多场合。它是上一个合并方法的反向操作:split("A;B;C",";") = {"A", "B", "C"}。这个分割方法现在已经可以在 JDK 1.4的java.lang.String里找到了。

reverseDelimitedString(String, String):这是个很有趣的方法。它能以定界符为基础颠倒一段文本。所以:reverseDelimitedString("org.apache.commons")的结果就变成了"commons.apache.org."

replace(String, String, String):这个String替换方法常常是很让人期待的。JDK1.4能够使用正规表达式解决这个问题,但是StringUtils类所提供的基于String更简单的版本更常用。

RandomStringUtils是一个设计用来随机生成文本位的类,这在密码的生成上很常见。其全部范围是unicode,并且支持英文字母、Ascii码、AsciiNumeric和数字的特别重载。我希望在将来能把它插入到一个更大的随机化框架里,并使其更加本土化。

例外

在过去几年中,我所见过最通用的可重用类之一就是好用的NestedException或者CascadedException。现在在JDK 1.4的java.lang.Throwable里,例外的子工具包是一组尝试处理大多数执行的类,这个子工具包在Commons Lang的Beta版里只是一个执行。

这个东西看起来不像是很有用,习惯JDK 1.3的人可以使用一个执行,习惯JDK 1.4的人可以使用SDK版。重要的是要记住,Commons Lang最大的用户就是Jakarta项目本身,这个项目包含的许多子项目都能用户同时多个版本的Java来工作。

隐藏在ExceptionUtils里的是个有用的方法:

String getStackTrace(Throwable)把Throwable转换成String这是涌现出来的众多String工具之一。

Enum

在Java刚刚发布的时候,它被看成是另一个版本的C语言。更加明智的人(我不在其中,当时我自己还拥有一个已经快不行了的Amiga)指出来它只是像C,其核心特性和其它语言有巨大的区别;而当时很多人还在疑惑:它去掉了C的哪个部分,并想知道为什么。位于列表榜首的,或者说接近榜首的,是C enum声明。其经典用法是实现代码位,例如:

enum day {monday, tuesday, wednesday, thursday, friday, saturday, sunday};

这允许monday被自动赋值为0,Tuesday被赋值为1,依此类推。然后,编译器密切注意日期变量类型,并帮助程序员避免不可预计的错误。

Java里有一些问题都有这样一个东西――那就是Java真正的常数都不能活过RMI或者多ClassLoading――Lang Enum类面对RMI时能够很好地处理自身,只要你避免使用全等(==)比较方法。使用Lang Enum日期计数器的例子在Listing A里有。

是的,它比C版本的要长得多,但是这是语言里没有句法的必然结果。

生成器

我所要讨论的org.apache.commons.lang工具包的最新子工具包是生成器。这个工具包里的类使创建诸如等式、toString、hashCode和compareTo这些标准方法变得更容易、更安全。HashCode生成和等式生成器都遵从Joshua Bloch在他经典的《有效的Java:编程指导(Effective Java: Programming Language Guide)》里指定的规则。例如,要编写一个好的hashCode方法,你可以仔细考虑,也可以这样做:

public int hashCode() {

return new HashCodeBuilder(17, 37).append(width)

.append(height)

.append(z)

.append(name)

.toHashCode();

}

要编写一个简单的等式方法,这样做:

public boolean equals(Object obj) {

if(!obj instanceof ThisClass) { return false; }

ThisClass tc = (ThisClass)obj;

return new EqualsBuilder().test(name, tc.name)

.test(age, tc.age)

.test(postcode, tc.postcode)

.isEquals();

}

这些生成器类的学习曲线要略高于简单公共静态函数的,但是其回报,即减轻了开发难度,是相当明显的。

这个工具包里的其他东西

org.apache.commons.lang工具包里还有其他的类,例如用于表示一组数字的NumberRange类,以及NumberUtils类,它包含了各种有用的函数,例如String到数字的转换和最大/最小方法。此外不要忘了ObjectUtils,你可以用它来为对象创建缺省的toString方法,甚至是在toString被强制替代时。

而且,SystemUtils允许你轻易地访问一些标准的Java环境变量,SerializationUtils也让串连对象变得容易得多。

总括

我只是很快地谈了一下Commons Lang API,跳过了很多方法,但是希望能够让大家对这个API留下一个总体的好印象。它的设计初衷就是要让你的Java项目更容易一点。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有