Apache Jakarta Common Lang 介紹
無(wú)論你在開(kāi)發(fā)哪中 Java 應(yīng)用程序,都免不了要寫(xiě)很多工具類(lèi)/工具函數(shù)。你可知道,有很多現(xiàn)成的工具類(lèi)可用,并且代碼質(zhì)量都很不錯(cuò),不用你寫(xiě),不用你調(diào)試,只要你發(fā)現(xiàn)。
在 Apache Jakarta Common 中, Lang 這個(gè) Java 工具包是所有 Apache Jakarta Common 項(xiàng)目中被使用最廣泛的,幾乎你所知道的名氣比較大的軟件里面都有用到它,包括 Tomcat, Weblogic, Websphere, Eclipse 等等。我們就從這個(gè)包開(kāi)始介紹整個(gè) common 項(xiàng)目。
Lang 中最大的也是最常用的類(lèi)是 StringUtils, StringUtils 最常用的函數(shù)是 isEmpty。這里舉一個(gè)例子讓你熟悉一下:
String str = null;
if(StringUtils.isEmpty(str)){
}
str = StringUtils.lowerCase(str);
str = StringUtils.capitalize(str);
str = StringUtils.swapCase(str);
StringUtils.isNumeric(str);
StringUtils.isAsciiPrintable(str);
StringUtils.equalsIgnoreCase(str,"");
其中,
if(StringUtils.isEmpty(str)){
}
相當(dāng)于
if(str == null || str.length() == 0){
}
從以上代碼可以看出這個(gè)工具類(lèi)的特點(diǎn):
第一、這些函數(shù)都是靜態(tài)函數(shù),并且很少拋出異常,也很少拋出控制針異常。
第二、這些函數(shù)的功能大多是增強(qiáng)標(biāo)準(zhǔn) Java 中 java.lang.String 類(lèi)的功能。
其實(shí),整個(gè) lang 包的函數(shù)基本上都在增強(qiáng) java.lang 包的功能。一個(gè)有趣的設(shè)計(jì)是,雖然 StringUtils 里面的函數(shù)都是靜態(tài)函數(shù),按照通常的做法,會(huì)把構(gòu)造函數(shù)設(shè)計(jì)成 private, 但是不!StringUtils 的構(gòu)造函數(shù)是 public 的。構(gòu)造函數(shù)里面的注釋寫(xiě)著 "no init"。這就有意思了,你可以 new 一個(gè) StringUtils,雖然沒(méi)有特別的好處,但是也沒(méi)有特別的壞處;你可以寫(xiě)一個(gè) StringUtils 的子類(lèi),雖然這也不太常見(jiàn)。這里面的思想似乎是,使用這個(gè)工具包的軟件開(kāi)發(fā)人員想怎么用就怎么用,做工具類(lèi)的時(shí)候不用太多限制。
至于不拋異常是因?yàn)楝F(xiàn)在很多人已經(jīng)意識(shí)到 Java 中的異常不是什么好東西,如果不用異常也能寫(xiě)程序,為什么還要用異常?用了異常就要寫(xiě)很多 try catch,在很多場(chǎng)合,比如 jdbc driver,這已經(jīng)證明了會(huì)使代碼量增加并且代碼的可讀性變差。
這里的思路會(huì)不會(huì)影響大家寫(xiě)程序的習(xí)慣呢?
StringUtils 的函數(shù)很多,不一一列舉。 Lang 中次重要的類(lèi)要數(shù) ArrayUtils,主要功能涉及到數(shù)組的比較、轉(zhuǎn)換、拆分、合并、查找、增減、倒轉(zhuǎn)等等操作。在 JDK 中,這類(lèi)操作沒(méi)有現(xiàn)成的函數(shù)。
Lang 中工具類(lèi)比較多,這里介紹幾個(gè)主要的:
ClassUtils getShortClassName,這個(gè)函數(shù)應(yīng)該在 java.lang.Class 類(lèi)中有的,我看到很多人自己寫(xiě)這個(gè)函數(shù)。getAllInterfaces,convertClassNamesToClasses,isAssignable,primitivesToWrappers,isInnerClass。
NumberUtils 關(guān)于數(shù)字以及數(shù)字和字符串轉(zhuǎn)換的類(lèi) stringToInt,toDouble,createNumber,isAllZeros, int compare(float lhs, float rhs), isNumber(String str),double min(double[] array)。
RandomUtils 用于產(chǎn)生隨機(jī)數(shù)的。
DateFormatUtils 日期時(shí)間格式轉(zhuǎn)換,以及本地時(shí)間和 UTC 時(shí)間轉(zhuǎn)換。
DateUtils 日期工具類(lèi)。isSameDay,truncate,round,modify。
基于反射機(jī)制的幾個(gè)類(lèi):
CompareToBuilder 比較,用在算法、排序、比較的地方。reflectionCompare,append。
EqualsBuilder 通過(guò)反射機(jī)制比較。reflectionEquals 很多項(xiàng)目中用到。
HashCodeBuilder 可以通過(guò)反射生成 hash code,很多算法的地方涉及到 hash code,但是并不是每個(gè)人都知道一種 hash code 的生成方法。
ToStringBuilder 當(dāng)你需要重載 toString 函數(shù)而不想寫(xiě)代碼把當(dāng)前類(lèi)的所有成員信息列出來(lái),可以用這個(gè)函數(shù)。
其它的幾個(gè)類(lèi)我用得比較少:
SerializationUtils Java 中得序列化比較奧妙,容易出錯(cuò)啊。
SystemUtils 可以讀取一些關(guān)于 jdk 信息,操作系統(tǒng)信息的工具類(lèi)。
聯(lián)系客服