﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-糊言乱语-文章分类-jakarta Commons</title><link>http://www.blogjava.net/coolingverse/category/26252.html</link><description>志未半斤, 才无八两. 有苦有乐, 糊涂过活。</description><language>zh-cn</language><lastBuildDate>Fri, 28 Sep 2007 14:52:05 GMT</lastBuildDate><pubDate>Fri, 28 Sep 2007 14:52:05 GMT</pubDate><ttl>60</ttl><item><title>[Jakarta Commons笔记] Commons Collections - Transformer组</title><link>http://www.blogjava.net/coolingverse/articles/148146.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:46:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148146.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148146.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148146.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148146.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148146.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 接下来看Transformer组。&nbsp;TransformerChainedTransformerSwitchTransformerTransformerUtils&nbsp;我们有时候需要将某个对象转换成另一个对象供另一组方法调用，而这两类对象的类型有可能并不是出于同一个继承体系的，或者说出了很基本的Object之外没有共同的父类，或者我们根本不关心他们是不是有...&nbsp;&nbsp;<a href='http://www.blogjava.net/coolingverse/articles/148146.html'>阅读全文</a><img src ="http://www.blogjava.net/coolingverse/aggbug/148146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:46 <a href="http://www.blogjava.net/coolingverse/articles/148146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] Commons Collections - Closure组</title><link>http://www.blogjava.net/coolingverse/articles/148147.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:46:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148147.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148147.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148147.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148147.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">接下来看</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Closure</span><span style="font-family: 宋体;">组。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Closure<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ChainedClosure<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">IfClosure<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">WhileClosure<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ClosureUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">Closure</span><span style="font-family: 宋体;">这一组接口和类提供一个操作对象的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">execute</span><span style="font-family: 宋体;">方法，为我们在处理一系列对象时可以将处理逻辑分离出来。理论上讲，使用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Transformer</span><span style="font-family: 宋体;">也可以达到类似的效果，只要输出对象和输入对象是同一个对象就好，但是</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Closure</span><span style="font-family: 宋体;">接口定义的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">execute</span><span style="font-family: 宋体;">方法返回</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">void</span><span style="font-family: 宋体;">，并且从效果和功能区分上，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Closure</span><span style="font-family: 宋体;">可以更好的诠释对象处理或执行的意思。而事实上，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ClosureUtils</span><span style="font-family: 宋体;">中也提供了一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">asClosure</span><span style="font-family: 宋体;">方法包装一个现成的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Transformer</span><span style="font-family: 宋体;">。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">沿用前面的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Emploee</span><span style="font-family: 宋体;">类，我们来给一组员工涨工资：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.commons.collections;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> java.util.Arrays;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> java.util.Collection;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> java.util.Date;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> java.util.Iterator;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.Closure;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.CollectionUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.StringUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> ClosureUsage {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> main(String[] args) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoClosureUsage();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoClosureUsage() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoClosureUsage "</span>, 40,<span style="color: blue;"> "="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// data setup<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Employee[] employees = <strong><span style="color: navy;">new</span></strong> Employee[] {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> Employee(<span style="color: blue;">"Tony"</span>, 26, new Date(), <span style="color: blue;">"E4"</span>, 2000),<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> Employee(<span style="color: blue;">"Michelle"</span>, 24, new Date(), <span style="color: blue;">"E4"</span>, 2000),<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> Employee(<span style="color: blue;">"Jack"</span>, 28, new Date(), <span style="color: blue;">"E5"</span>, 3000)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>};<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Collection empColl = Arrays.asList(employees);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printColl(<span style="color: blue;">"Before salary increase:"</span>, empColl);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// closure setup<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Closure salaryIncreaseClosure = <strong><span style="color: navy;">new</span></strong> Closure() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> execute(Object obj) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Employee emp = (Employee) obj;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>emp.setSalary(emp.getSalary() * 1.20);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>};<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// salary increase<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CollectionUtils.forAllDo(empColl, salaryIncreaseClosure);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printColl(<span style="color: blue;">"After salary increase:"</span>, empColl);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.repeat(<span style="color: blue;">"="</span>, 40));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> printColl(String label, Collection c) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (StringUtils.isNotBlank(label)) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(label);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Iterator iter = c.iterator();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">while</span></strong> (iter.hasNext()) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(iter.next());<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">以下是运行结果：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">=========== demoClosureUsage ===========</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Before salary increase:</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Employee[name=Tony,age=26,dateJoined=<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="5" month="8" year="2005">2005-08-05</st1:chsdate>,grade=E4,salary=2000.0]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Employee[name=Michelle,age=24,dateJoined=<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="5" month="8" year="2005">2005-08-05</st1:chsdate>,grade=E4,salary=2000.0]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Employee[name=Jack,age=28,dateJoined=<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="5" month="8" year="2005">2005-08-05</st1:chsdate>,grade=E5,salary=3000.0]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">After salary increase:</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Employee[name=Tony,age=26,dateJoined=<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="5" month="8" year="2005">2005-08-05</st1:chsdate>,grade=E4,salary=2400.0]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Employee[name=Michelle,age=24,dateJoined=<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="5" month="8" year="2005">2005-08-05</st1:chsdate>,grade=E4,salary=2400.0]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Employee[name=Jack,age=28,dateJoined=<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="5" month="8" year="2005">2005-08-05</st1:chsdate>,grade=E5,salary=3600.0]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">========================================</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">我这里举的是一个相对简单的例子，在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Closure</span><span style="font-family: 宋体;">这一组还有一些很方便的类，如</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ChainedClosure</span><span style="font-family: 宋体;">可以包装一组</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Closure</span><span style="font-family: 宋体;">作为整体执行；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">IfClosure</span><span style="font-family: 宋体;">在创建时需要提供给它一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">和两个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Closure</span><span style="font-family: 宋体;">，执行时先做</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">判定再决定执行哪一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Closure</span><span style="font-family: 宋体;">；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">SwitchClosure</span><span style="font-family: 宋体;">跟</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">SwitchTransformer</span><span style="font-family: 宋体;">类似，根据创建时传入的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">组和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Closure</span><span style="font-family: 宋体;">组对应执行；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">WhileClosure</span><span style="font-family: 宋体;">则根据创建时传入的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">做判断，如果为</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">true</span><span style="font-family: 宋体;">则执行</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Closure</span><span style="font-family: 宋体;">，直到</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">返回</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">false</span><span style="font-family: 宋体;">；等等。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 宋体;">具体用法请参考</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Javadoc</span><span style="font-family: 宋体;">。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:46 <a href="http://www.blogjava.net/coolingverse/articles/148147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] Commons Collections - Predicate组</title><link>http://www.blogjava.net/coolingverse/articles/148145.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:45:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148145.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148145.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148145.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148145.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148145.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">接下来看</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">组</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Predicate<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">AndPredicate<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">OrPredicate<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">AllPredicate<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">OnePredicate<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">NonePredicate<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">PredicateUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">是</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Collections</span><span style="font-family: 宋体;">中定义的一个接口，可以在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections</span><span style="font-family: 宋体;">包中找到。其中定义的方法签名如下：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">boolean</span></strong> evaluate(Object object)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">它以一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Object</span><span style="font-family: 宋体;">对象为参数，处理后返回一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">boolean</span><span style="font-family: 宋体;">值，检验某个对象是否满足某个条件。其实这个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">以及上一篇笔记提到的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Comparator</span><span style="font-family: 宋体;">还有我们即将看到的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Transformer</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Closure</span><span style="font-family: 宋体;">等都有些类似</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">C/C++</span><span style="font-family: 宋体;">中的函数指针，它们都只是提供简单而明确定义的函数功能而已。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">跟其他组类似，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Collections</span><span style="font-family: 宋体;">也提供了一组定义好的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">类供我们使用，这些类都放在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections.functors</span><span style="font-family: 宋体;">包中。当然，我们也可以自定义</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">，只要实现这个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">接口即可。在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Collections</span><span style="font-family: 宋体;">中我们也可以很方便使用的一组预定义复合</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">，我们提供</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">2</span><span style="font-family: 宋体;">个或不定数量个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">，然后交给它，它可以帮我们处理额外的逻辑，如</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">AndPredicate</span><span style="font-family: 宋体;">处理两个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">，只有当两者都返回</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">true</span><span style="font-family: 宋体;">它才返回</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">true</span><span style="font-family: 宋体;">；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">AnyPredicate</span><span style="font-family: 宋体;">处理多个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">，当其中一个满足就返回</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">true</span><span style="font-family: 宋体;">，等等。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">看看具体的代码中如何使用这些</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">吧：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.commons.collections;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.Predicate;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.PredicateUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.functors.InstanceofPredicate;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.functors.NotNullPredicate;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.BooleanUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.StringUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> PredicateUsage {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> main(String[] args) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoPredicates();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoPredicates() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoPredicates "</span>, 40, <span style="color: blue;">"="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Predicate p1 = <strong><span style="color: navy;">new</span></strong> InstanceofPredicate(String.class);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Predicate p2 = NotNullPredicate.getInstance();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Predicate p3 = <strong><span style="color: navy;">new</span></strong> Predicate() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">boolean</span></strong> evaluate(Object obj) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String str = (String) obj;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> StringUtils.isAlphanumeric(str) <o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&amp;&amp; str.length() &gt;= 6 <o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&amp;&amp; str.length() &lt;= 10;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>};<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span>Predicate p4 = PredicateUtils.allPredicate(<strong><span style="color: navy;">new</span></strong> Predicate[]{p1, p2, p3});<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String input = <span style="color: blue;">"ABCD1234"</span>;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Object[] raw = <strong><span style="color: navy;">new</span></strong> Object[] {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue;">"Is '"</span>,<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>input,<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue;">"' a valid input? "</span>,<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BooleanUtils.toStringYesNo(p4.evaluate(input)),<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue;">"."<o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>};<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.join(raw));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.repeat(<span style="color: blue;">"="</span>, 40));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">输出结果如下：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">============ demoPredicates ============</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Is 'ABCD1234' a valid input? yes.</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">========================================</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 宋体;">这里面我首先定义了</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">3</span><span style="font-family: 宋体;">个简单的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">p1</span><span style="font-family: 宋体;">判断对象是否为</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">String</span><span style="font-family: 宋体;">的实例，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">p2</span><span style="font-family: 宋体;">判断是否对象为</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">null</span><span style="font-family: 宋体;">，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">p3</span><span style="font-family: 宋体;">是自定义的，判断是否为数字字母的组合，并且长度在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">6~10</span><span style="font-family: 宋体;">字符。然后我用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">AllPredicate</span><span style="font-family: 宋体;">将它们组合到一起，成为</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">p4</span><span style="font-family: 宋体;">，当</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">p1</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">p2</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">p3</span><span style="font-family: 宋体;">都满足时，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">p4</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">evaluate</span><span style="font-family: 宋体;">方法才返回</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">true</span><span style="font-family: 宋体;">。利用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">我们可以把判断</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">true</span><span style="font-family: 宋体;">或</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">false</span><span style="font-family: 宋体;">的逻辑从特定的业务代码分离出来，以后我们重用也好，重新组装也好，都是很方便的。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:45 <a href="http://www.blogjava.net/coolingverse/articles/148145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] Commons Collections - Collection组</title><link>http://www.blogjava.net/coolingverse/articles/148143.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:44:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148143.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148143.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148143.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148143.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148143.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">接下来看看</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collection</span><span style="font-family: 宋体;">组。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">TypedCollection<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">CollectionUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">首先就是这个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">TypedCollection</span><span style="font-family: 宋体;">，它实际上的作用就是提供一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">decorate</span><span style="font-family: 宋体;">方法，我们传进去一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collection</span><span style="font-family: 宋体;">和需要的类型甄别信息</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">java.lang.Class</span><span style="font-family: 宋体;">，它给我们创建一个全新的强类型的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collection</span><span style="font-family: 宋体;">。我们其实在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">bag</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">buffer</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">list</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">map</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">set</span><span style="font-family: 宋体;">这些子包中都可以找到分别对应</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Bag</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Buffer</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">List</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Map</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Set</span><span style="font-family: 宋体;">接口的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">TypedXxxx</span><span style="font-family: 宋体;">版本。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">方法签名：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">static</span></strong> Collection decorate(Collection coll, Class type)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">当它执行时，它会判断</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">coll</span><span style="font-family: 宋体;">是否为</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">null</span><span style="font-family: 宋体;">，同时如果</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">coll</span><span style="font-family: 宋体;">包含数据，它会对数据进行验证，看是否满足指定的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">type</span><span style="font-family: 宋体;">条件。最后它返回一个强类型的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collection</span><span style="font-family: 宋体;">，当我们对这个强类型的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collection</span><span style="font-family: 宋体;">进行</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">add</span><span style="font-family: 宋体;">操作时，它会帮我们确保添加的是正确的类型。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">而这个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">CollectionUtils</span><span style="font-family: 宋体;">可能大家都已经想到了，就是提供一组针对</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collection</span><span style="font-family: 宋体;">操作的工具</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">/</span><span style="font-family: 宋体;">静态方法。比较有意思的是对</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collection</span><span style="font-family: 宋体;">的转型、合并、减等操作。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 宋体;">由于这两个类的功能和作用都比较清晰，我就不举例说明了，需要进一步了解的请看</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Javadoc</span><span style="font-family: 宋体;">。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:44 <a href="http://www.blogjava.net/coolingverse/articles/148143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] Commons Collections - Comparator组</title><link>http://www.blogjava.net/coolingverse/articles/148144.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:44:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148144.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148144.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148144.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148144.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148144.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">接下来我们会讲到辅助类，首先看</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Comparator</span><span style="font-family: 宋体;">组。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ReverseComparator<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ComparatorChain<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">NullComparator<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">FixedOrderComparator<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ComparatorUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">其实</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Comparator</span><span style="font-family: 宋体;">这个概念并不是</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Collections</span><span style="font-family: 宋体;">引入的，在标准的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java Collections API</span><span style="font-family: 宋体;">中，已经明确定了一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">java.util.Comparator</span><span style="font-family: 宋体;">接口，只是有很多人并不了解，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Collections</span><span style="font-family: 宋体;">也只是扩展了这个接口而已。这个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">java.util.Comparator</span><span style="font-family: 宋体;">定义如下核心方法：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">int</span></strong> compare(Object arg0, Object arg1)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">传给它两个对象，它要告诉我们这两个对象哪一个在特定的语义下更&#8220;大&#8221;，或者两者相等。如果</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">arg0 &gt; arg1</span><span style="font-family: 宋体;">，返回大于</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">0</span><span style="font-family: 宋体;">的整数；如果</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">arg0 = arg1</span><span style="font-family: 宋体;">，返回</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">0</span><span style="font-family: 宋体;">；如果</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">arg0 &lt; arg2</span><span style="font-family: 宋体;">，返回小于</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">0</span><span style="font-family: 宋体;">的整数。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">我们看看</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Collections</span><span style="font-family: 宋体;">给我们提供了哪些</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Comparator</span><span style="font-family: 宋体;">的实现类（都在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections.comparators</span><span style="font-family: 宋体;">包下面）：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">BooleanComparator &#8211; </span><span style="color: navy; font-family: 宋体;">用于排序一组</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Boolean</span><span style="color: navy; font-family: 宋体;">对象，指明先</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">true</span><span style="color: navy; font-family: 宋体;">还是先</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">false</span><span style="color: navy; font-family: 宋体;">；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ComparableComparator &#8211; </span><span style="color: navy; font-family: 宋体;">用于排序实现了</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">java.lang.Comparable</span><span style="color: navy; font-family: 宋体;">接口的对象（我们常用的</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="color: navy; font-family: 宋体;">类如</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">String</span><span style="color: navy; font-family: 宋体;">、</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Integer</span><span style="color: navy; font-family: 宋体;">、</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Date</span><span style="color: navy; font-family: 宋体;">、</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Double</span><span style="color: navy; font-family: 宋体;">、</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">File</span><span style="color: navy; font-family: 宋体;">、</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Character</span><span style="color: navy; font-family: 宋体;">等等都实现了</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Comparable</span><span style="color: navy; font-family: 宋体;">接口）；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ComparatorChain &#8211; </span><span style="color: navy; font-family: 宋体;">定义一组</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Comparator</span><span style="color: navy; font-family: 宋体;">链，链中的</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Comparator</span><span style="color: navy; font-family: 宋体;">对象会被依次执行；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">FixedOrderComparator &#8211; </span><span style="color: navy; font-family: 宋体;">用于定义一个特殊的顺序，对一组对象按照这样的自定义顺序进行排序；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">NullComparator &#8211; </span><span style="color: navy; font-family: 宋体;">让</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">null</span><span style="color: navy; font-family: 宋体;">值也可参与比较，可以设定为先</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">null</span><span style="color: navy; font-family: 宋体;">或者后</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">null</span><span style="color: navy; font-family: 宋体;">；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ReverseComparator &#8211; </span><span style="color: navy; font-family: 宋体;">将原有的</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Comparator</span><span style="color: navy; font-family: 宋体;">效果反转；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">TransformingComparator &#8211; </span><span style="color: navy; font-family: 宋体;">将一个</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Comparator</span><span style="color: navy; font-family: 宋体;">装饰为具有</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Transformer</span><span style="color: navy; font-family: 宋体;">效果的</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Comparator</span><span style="color: navy; font-family: 宋体;">。</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: green; font-family: 'Trebuchet MS';" lang="EN-US">// </span><span style="color: green; font-family: 宋体;">有关</span><span style="color: green; font-family: 'Trebuchet MS';" lang="EN-US">Transformer</span><span style="color: green; font-family: 宋体;">的内容会在以后的笔记中讲到。</span><span style="color: green; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">以上除了</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ComparatorChain</span><span style="font-family: 宋体;">之外，似乎都是实现一些很基本的比较方法，但是当我们用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ComparatorChain</span><span style="font-family: 宋体;">将一组</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Comparator</span><span style="font-family: 宋体;">串起来之后，就可以实现非常灵活的比较操作。那么这些</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Comparator</span><span style="font-family: 宋体;">在实际代码中如何使用呢？看例子：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #3366ff; font-family: 'Courier New';" lang="EN-US">/** Issue.java */<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.commons.collections;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.builder.ToStringBuilder;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.builder.ToStringStyle;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> Issue {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> <strong><span style="color: navy;">long</span></strong> id;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> String severity;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> String owner;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> Issue() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> Issue(<strong><span style="color: navy;">long</span></strong> id, String severity, String owner) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.id = id;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.severity = severity;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.owner = owner;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> String toString() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return <strong><span style="color: navy;">new</span></strong> ToStringBuilder(<strong><span style="color: navy;">this</span></strong>, ToStringStyle.SHORT_PREFIX_STYLE)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.append(<span style="color: blue;">"id"</span>, id)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.append(<span style="color: blue;">"severity"</span>, severity)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.append(<span style="color: blue;">"owner"</span>, owner)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.toString();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">long</span></strong> getId() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> id;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setId(<strong><span style="color: navy;">long</span></strong> id) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.id = id;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> String getOwner() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> owner;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setOwner(String owner) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.owner = owner;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> String getSeverity() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> severity;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setSeverity(String severity) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.severity = severity;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #3366ff; font-family: 'Courier New';" lang="EN-US">/** ComparatorUsage.java */<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.commons.collections;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> java.util.Arrays;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> java.util.Comparator;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.beanutils.BeanComparator;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.comparators.ComparatorChain;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.comparators.FixedOrderComparator;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.StringUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> ComparatorUsage {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> main(String[] args) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoComparator();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoComparator() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoComparator "</span>, 40, <span style="color: blue;">"="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// data setup<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Issue[] issues = <strong><span style="color: navy;">new</span></strong> Issue[] {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> Issue(15102, <span style="color: blue;">"Major"</span>, <span style="color: blue;">"John"</span>),<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> Issue(15103, <span style="color: blue;">"Minor"</span>, <span style="color: blue;">"Agnes"</span>),<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> Issue(15104, <span style="color: blue;">"Critical"</span>, <span style="color: blue;">"Bill"</span>),<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> Issue(15105, <span style="color: blue;">"Major"</span>, <span style="color: blue;">"John"</span>),<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> Issue(15106, <span style="color: blue;">"Major"</span>, <span style="color: blue;">"John"</span>),<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> Issue(15107, <span style="color: blue;">"Critical"</span>, <span style="color: blue;">"John"</span>),<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> Issue(15108, <span style="color: blue;">"Major"</span>, <span style="color: blue;">"Agnes"</span>),<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> Issue(15109, <span style="color: blue;">"Minor"</span>, <span style="color: blue;">"Julie"</span>),<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> Issue(15110, <span style="color: blue;">"Major"</span>, <span style="color: blue;">"Mary"</span>),<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> Issue(15111, <span style="color: blue;">"Enhancement"</span>, <span style="color: blue;">"Bill"</span>),<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> Issue(15112, <span style="color: blue;">"Minor"</span>, <span style="color: blue;">"Julie"</span>),<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> Issue(15113, <span style="color: blue;">"Major"</span>, <span style="color: blue;">"Julie"</span>)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>};<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// comparators setup<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String[] severityOrder = {<span style="color: blue;">"Critical"</span>, <span style="color: blue;">"Major"</span>, <span style="color: blue;">"Minor"</span>, <span style="color: blue;">"Enhancement"</span>};<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Comparator severityComparator = <strong><span style="color: navy;">new</span></strong> FixedOrderComparator(severityOrder);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ComparatorChain compChain = <strong><span style="color: navy;">new</span></strong> ComparatorChain();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>compChain.addComparator(new BeanComparator(<span style="color: blue;">"owner"</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>compChain.addComparator(new BeanComparator(<span style="color: blue;">"severity"</span>, severityComparator));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>compChain.addComparator(new BeanComparator(<span style="color: blue;">"id"</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// sort and display<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Arrays.sort(issues, compChain);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">for</span></strong> (<strong><span style="color: navy;">int</span></strong> i = 0; i &lt; issues.length; i++) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(issues[i]);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.repeat(<span style="color: blue;">"="</span>, 40));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">输出结果为：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">============ demoComparator ============</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Issue[id=15108,severity=Major,owner=Agnes]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Issue[id=15103,severity=Minor,owner=Agnes]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Issue[id=15104,severity=Critical,owner=Bill]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Issue[id=15111,severity=Enhancement,owner=Bill]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Issue[id=15107,severity=Critical,owner=John]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Issue[id=15102,severity=Major,owner=John]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Issue[id=15105,severity=Major,owner=John]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Issue[id=15106,severity=Major,owner=John]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Issue[id=15113,severity=Major,owner=Julie]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Issue[id=15109,severity=Minor,owner=Julie]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Issue[id=15112,severity=Minor,owner=Julie]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Issue[id=15110,severity=Major,owner=Mary]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">========================================</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 宋体;">我们可以看到，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ComparatorChain</span><span style="font-family: 宋体;">中的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Comparator</span><span style="font-family: 宋体;">被依次执行，先按</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">name</span><span style="font-family: 宋体;">，再按我们自定义的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">severity</span><span style="font-family: 宋体;">次序，再按</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">id</span><span style="font-family: 宋体;">，最终我们得到了重新排列的数组。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148144.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:44 <a href="http://www.blogjava.net/coolingverse/articles/148144.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] Commons Collections - Buffer组</title><link>http://www.blogjava.net/coolingverse/articles/148141.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:43:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148141.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148141.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148141.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148141.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148141.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">来看</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Buffer</span><span style="font-family: 宋体;">组。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Buffer<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">BlockingBuffer<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">BoundedFifoBuffer<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">PriorityBuffer<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">UnboundedFifoBuffer<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">BufferUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">Buffer</span><span style="font-family: 宋体;">是定义在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections</span><span style="font-family: 宋体;">包下面的接口，用于表示按一定顺序除去成员对象的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">collection</span><span style="font-family: 宋体;">如队列等。具体的实现类在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections.buffer</span><span style="font-family: 宋体;">包下可以找到。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">BufferUtils</span><span style="font-family: 宋体;">提供很多静态</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">/</span><span style="font-family: 宋体;">工具方法装饰现有的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Buffer</span><span style="font-family: 宋体;">实例，如将其装饰成</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BlockingBuffer</span><span style="font-family: 宋体;">、执行类型检查的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">TypedBuffer</span><span style="font-family: 宋体;">、或者不可改变的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">UnmodifiableBuffer</span><span style="font-family: 宋体;">等等。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">最简单直接的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Buffer</span><span style="font-family: 宋体;">实现类是</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">UnboundedFifoBuffer</span><span style="font-family: 宋体;">，提供先进先出的大小可变的队列。而</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BoundedFifoBuffer</span><span style="font-family: 宋体;">则是对其大小进行了限制，是固定大小的先进先出队列。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BlockingBuffer</span><span style="font-family: 宋体;">要在多线程的环境中才能体现出它的价值，尤其是当我们需要实现某种流水线时这个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BlockingBuffer</span><span style="font-family: 宋体;">很有用：每个流水线上的组件从上游的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BlockingBuffer</span><span style="font-family: 宋体;">获取数据，处理后放到下一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BlockingBuffer</span><span style="font-family: 宋体;">中依次传递。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BlockingBuffer</span><span style="font-family: 宋体;">的核心特色通俗点说就是如果你向它要东西，而它暂时还没有的话，你可以一直等待直至拿到为止。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">PriorityBuffer</span><span style="font-family: 宋体;">则提供比一般的先进先出</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Buffer</span><span style="font-family: 宋体;">更强的控制力：我们可以自定义</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Comparator</span><span style="font-family: 宋体;">给它，告诉它怎么判定它的成员的先后顺序，优先级最高的最先走。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">为了方便和清晰的需要，我在这里只举一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BoundedFifoBuffer</span><span style="font-family: 宋体;">，包装成</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">TypedBuffer</span><span style="font-family: 宋体;">，看看在具体的代码中通常如何使用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Buffer</span><span style="font-family: 宋体;">：（还是沿用上次的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Book</span><span style="font-family: 宋体;">类）</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.commons.collections;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> java.util.Iterator;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.Buffer;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.BufferUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.buffer.BoundedFifoBuffer;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.StringUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> BufferUsage {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> main(String[] args) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoBufferUsage();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoBufferUsage() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoBagUsage "</span>, 40, <span style="color: blue;">"="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// data setup<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Book book1 = <strong><span style="color: navy;">new</span></strong> Book(<span style="color: blue;">"Refactoring Workbook"</span>, <span style="color: blue;">"7-5083-2208-8"</span>, 29.8);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Book book2 = <strong><span style="color: navy;">new</span></strong> Book(<span style="color: blue;">"J2EE Design Patterns"</span>, <span style="color: blue;">"7-5083-3099-4"</span>, 45);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Book book3 = <strong><span style="color: navy;">new</span></strong> Book(<span style="color: blue;">"Agile Software Development"</span>, <span style="color: blue;">"7-5083-1503-0"</span>, 59);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Book book4 = <strong><span style="color: navy;">new</span></strong> Book(<span style="color: blue;">"Professional JSP"</span>, <span style="color: blue;">"7-5053-8005-2"</span>, 100);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// create a Buffer<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Buffer buffer = <o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BufferUtils.typedBuffer(<strong><span style="color: navy;">new</span></strong> BoundedFifoBuffer(3), Book.<strong><span style="color: navy;">class</span></strong>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>buffer.add(book1);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>buffer.add(book2);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>buffer.add(book3);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Book removed = (Book) buffer.remove();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Removed:"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(removed);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>buffer.add(book4);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// get items in buffer<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">for</span></strong> (<strong><span style="color: navy;">int</span></strong> i = 0; i &lt; 3; i++) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(buffer.get());<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>buffer.remove();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.repeat(<span style="color: blue;">"="</span>, 40));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">以下是运行结果：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">============= demoBagUsage =============</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Removed:</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">sean.study.commons.collections.Book@e09713[</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>name=Refactoring Workbook</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>ISBN=7-5083-2208-8</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>retailPrice=29.8</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Remaining:</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">sean.study.commons.collections.Book@e09713[</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>name=J2EE Design Patterns</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>ISBN=7-5083-3099-4</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>retailPrice=45.0</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">sean.study.commons.collections.Book@47b480[</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>name=Agile Software Development</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>ISBN=7-5083-1503-0</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>retailPrice=59.0</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">sean.study.commons.collections.Book@19b49e6[</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>name=Professional JSP</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>ISBN=7-5053-8005-2</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>retailPrice=100.0</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">========================================</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 宋体;">我们可以看到，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Buffer</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">add</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">remove</span><span style="font-family: 宋体;">方法分别添加新成员和删除最先加入的成员。由于我们的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Buffer</span><span style="font-family: 宋体;">定义为只能装</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">3</span><span style="font-family: 宋体;">个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Book</span><span style="font-family: 宋体;">类的实例，所以不论我们试图加入其他类型的对象，或者加入超过</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">3</span><span style="font-family: 宋体;">个，操作都将失败。如果我们在遍历时使用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">get()</span><span style="font-family: 宋体;">而不调用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">remove()</span><span style="font-family: 宋体;">，那么我们将得到</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">3</span><span style="font-family: 宋体;">个相同的拷贝，而这正是我们期望的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">FIFO</span><span style="font-family: 宋体;">队列的行为。假如你需要遍历并保留数据，可以使用标准的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Iterator</span><span style="font-family: 宋体;">机制。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148141.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:43 <a href="http://www.blogjava.net/coolingverse/articles/148141.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] Commons Collections - Map组</title><link>http://www.blogjava.net/coolingverse/articles/148142.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:43:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148142.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148142.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148142.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148142.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148142.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">接下来看</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Map</span><span style="font-family: 宋体;">组。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">BidiMap<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">MultiMap<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">LazyMap<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">MapUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Collections</span><span style="font-family: 宋体;">在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">java.util.Map</span><span style="font-family: 宋体;">的基础上扩展了很多接口和类，比较有代表性的是</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BidiMap</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">MultiMap</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">LazyMap</span><span style="font-family: 宋体;">。跟</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Bag</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Buffer</span><span style="font-family: 宋体;">类似，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Collections</span><span style="font-family: 宋体;">也提供了一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">MapUtils</span><span style="font-family: 宋体;">。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">所谓</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BidiMap</span><span style="font-family: 宋体;">，直译就是双向</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Map</span><span style="font-family: 宋体;">，可以通过</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">key</span><span style="font-family: 宋体;">找到</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">value</span><span style="font-family: 宋体;">，也可以通过</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">value</span><span style="font-family: 宋体;">找到</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">key</span><span style="font-family: 宋体;">，这在我们日常的代码</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">-</span><span style="font-family: 宋体;">名称匹配的时候很方便：因为我们除了需要通过代码找到名称之外，往往也需要处理用户输入的名称，然后获取其代码。需要注意的是</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BidiMap</span><span style="font-family: 宋体;">当中不光</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">key</span><span style="font-family: 宋体;">不能重复，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">value</span><span style="font-family: 宋体;">也不可以。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">所谓</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">MultiMap</span><span style="font-family: 宋体;">，就是说一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">key</span><span style="font-family: 宋体;">不在是简单的指向一个对象，而是一组对象，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">add()</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">remove()</span><span style="font-family: 宋体;">的时候跟普通的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Map</span><span style="font-family: 宋体;">无异，只是在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">get()</span><span style="font-family: 宋体;">时返回一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collection</span><span style="font-family: 宋体;">，利用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">MultiMap</span><span style="font-family: 宋体;">，我们就可以很方便的往一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">key</span><span style="font-family: 宋体;">上放数量不定的对象，也就实现了一对多。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">所谓</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">LazyMap</span><span style="font-family: 宋体;">，意思就是这个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Map</span><span style="font-family: 宋体;">中的键</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">/</span><span style="font-family: 宋体;">值对一开始并不存在，当被调用到时才创建，这样的解释初听上去是不是有点不可思议？这样的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">LazyMap</span><span style="font-family: 宋体;">有用吗？我们这样来理解：我们需要一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Map</span><span style="font-family: 宋体;">，但是由于创建成员的方法很&#8220;重&#8221;（比如数据库访问），或者我们只有在调用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">get()</span><span style="font-family: 宋体;">时才知道如何创建，或者</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Map</span><span style="font-family: 宋体;">中出现的可能性很多很多，我们无法在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">get()</span><span style="font-family: 宋体;">之前添加所有可能出现的键</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">/</span><span style="font-family: 宋体;">值对，或者任何其它解释得通的原因，我们觉得没有必要去初始化一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Map</span><span style="font-family: 宋体;">而又希望它可以在必要时自动处理数据生成的话，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">LazyMap</span><span style="font-family: 宋体;">就变得很有用了。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">我们还是通过一个具体的例子来说明：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.commons.collections;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> java.util.Date;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> java.util.HashMap;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> java.util.Map;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.BidiMap;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.Factory;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.MultiHashMap;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.MultiMap;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.bidimap.DualHashBidiMap;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.map.LazyMap;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.StringUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> MapUsage {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> main(String[] args) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoBidiMap();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoMultiMap();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoLazyMap();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoBidiMap() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoBidiMap "</span>, 40, <span style="color: blue;">"="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BidiMap bidiMap = <strong><span style="color: navy;">new</span></strong> DualHashBidiMap();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>bidiMap.put(<span style="color: blue;">"BJ"</span>, <span style="color: blue;">"<st1:city w:st="on"><st1:place w:st="on">Beijing</st1:place></st1:city>"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>bidiMap.put(<span style="color: blue;">"SH"</span>, <span style="color: blue;">"<st1:city w:st="on"><st1:place w:st="on">Shanghai</st1:place></st1:city>"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>bidiMap.put(<span style="color: blue;">"GZ"</span>, <span style="color: blue;">"<st1:city w:st="on"><st1:place w:st="on">Guangzhou</st1:place></st1:city>"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>bidiMap.put(<span style="color: blue;">"CD"</span>, <span style="color: blue;">"<st1:city w:st="on"><st1:place w:st="on">Chengdu</st1:place></st1:city>"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Key-Value: BJ = "</span> + bidiMap.get(<span style="color: blue;">"BJ"</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Value-Key: <st1:city w:st="on">Chengdu</st1:city> = "</span> + bidiMap.getKey(<span style="color: blue;">"<st1:city w:st="on"><st1:place w:st="on">Chengdu</st1:place></st1:city>"</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.repeat(<span style="color: blue;">"="</span>, 40));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoMultiMap() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoMultiMap "</span>, 40, <span style="color: blue;">"="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MultiMap multiMap = <strong><span style="color: navy;">new</span></strong> MultiHashMap();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>multiMap.put(<span style="color: blue;">"Sean"</span>, <span style="color: blue;">"C/C++"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>multiMap.put(<span style="color: blue;">"Sean"</span>, <span style="color: blue;">"OO"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>multiMap.put(<span style="color: blue;">"Sean"</span>, <span style="color: blue;">"Java"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>multiMap.put(<span style="color: blue;">"Sean"</span>, <span style="color: blue;">".NET"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>multiMap.remove(<span style="color: blue;">"Sean"</span>, <span style="color: blue;">"C/C++"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Sean's skill set: "</span> + multiMap.get(<span style="color: blue;">"Sean"</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.repeat(<span style="color: blue;">"="</span>, 40));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoLazyMap() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoLazyMap "</span>, 40, <span style="color: blue;">"="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// borrowed from Commons Collection's Javadoc<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Factory factory = <strong><span style="color: navy;">new</span></strong> Factory() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> Object create() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> <strong><span style="color: navy;">new</span></strong> Date();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>};<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Map lazy = LazyMap.decorate(<strong><span style="color: navy;">new</span></strong> HashMap(), factory);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(lazy.get(<span style="color: blue;">"NOW"</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.repeat(<span style="color: blue;">"="</span>, 40));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">以下是运行结果：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">============= demoBidiMap ==============</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Key-Value: BJ = <st1:city w:st="on"><st1:place w:st="on">Beijing</st1:place></st1:city></span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Value-Key: <st1:city w:st="on"><st1:place w:st="on">Chengdu</st1:place></st1:city> = CD</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">========================================</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">============= demoMultiMap =============</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Sean's skill set: [OO, Java, .NET]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">========================================</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">============= demoLazyMap ==============</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Wed Aug 03 12:44:56 CST 2005</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">========================================</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 宋体;">简单说一下这个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Factory</span><span style="font-family: 宋体;">，它是定义在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections</span><span style="font-family: 宋体;">包下面的一个接口，用于自定义对象的创建过程。这个有点像是后面我们要讲的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Transformer</span><span style="font-family: 宋体;">的简化版本，但是也更直接也很好用，至少</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Collections</span><span style="font-family: 宋体;">通过它向开发人员开放了一个可以方便控制对象创建细节的接口。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:43 <a href="http://www.blogjava.net/coolingverse/articles/148142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] Commons Collections</title><link>http://www.blogjava.net/coolingverse/articles/148139.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:42:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148139.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148139.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148139.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148139.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Collections</span><span style="font-family: 宋体;">，又是一个重量级的东西，为</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">标准的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collections API</span><span style="font-family: 宋体;">提供了相当好的补充。我不知道其他人，就我自己而言，让我用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">java.util.Collection</span><span style="font-family: 宋体;">及其子类，加上</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">java.util.Collections</span><span style="font-family: 宋体;">类
提供的操作方法，处理一些简单的数据结构问题还可以，稍微复杂一点的就觉得有点头痛，很多细节的地方需要我插入这样那样的小逻辑，或者感觉它太死板，不够
灵活，再或者确实有点晦涩吧。再说了，如果我只是处理一般的数据结构问题，为什么不自己用数组或者自定义的链表来做，再加上</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Jakarta Commons</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Lang</span><span style="font-family: 宋体;">提供的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ArrayUtils</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">StringUtils</span><span style="font-family: 宋体;">等，已经基本够了，性能可以保证，那么还要这个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collections API</span><span style="font-family: 宋体;">干嘛。当然，说到这里有些偏激了，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collections</span><span style="font-family: 宋体;">当然有它存在的道理，能够把常用的数据结构归纳起来，以通用的方式去维护和访问，这应该说是一种进步，但是用起来似乎不够友好。这个时候我就会想，如果</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">比现在做得更好用些，或者有一套第三方的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">把我的这些需求抽象出来，实现了，该多好。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Collections</span><span style="font-family: 宋体;">就是这样一套</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">在这里可以找到下载链接：（</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">binary</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">src</span><span style="font-family: 宋体;">都有）</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><a href="http://jakarta.apache.org/site/downloads/downloads_commons-collections.cgi">http://jakarta.apache.org/site/downloads/downloads_commons-collections.cgi</a><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">目前</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Collection</span><span style="font-family: 宋体;">发布的最新版本是</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">3.1</span><span style="font-family: 宋体;">。建议下载这个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">3.1</span><span style="font-family: 宋体;">版本，页面上出现的</span><st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span style="font-family: 'Trebuchet MS';" lang="EN-US">2.1.1</span></st1:chsdate><span style="font-family: 宋体;">是针对</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">2.1</span><span style="font-family: 宋体;">不兼容</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">3.0</span><span style="font-family: 宋体;">而发布的升级维护版。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">我们先来浏览一下它的包结构。一共是</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">12</span><span style="font-family: 宋体;">个：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections &#8211; Commons Collections</span><span style="color: navy; font-family: 宋体;">自定义的一组公用的接口和工具类</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections.bag &#8211; </span><span style="color: navy; font-family: 宋体;">实现</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Bag</span><span style="color: navy; font-family: 宋体;">接口的一组类</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections.bidimap &#8211; </span><span style="color: navy; font-family: 宋体;">实现</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">BidiMap</span><span style="color: navy; font-family: 宋体;">系列接口的一组类</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections.buffer &#8211; </span><span style="color: navy; font-family: 宋体;">实现</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Buffer</span><span style="color: navy; font-family: 宋体;">接口的一组类</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections.collection &#8211; </span><span style="color: navy; font-family: 宋体;">实现</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">java.util.Collection</span><span style="color: navy; font-family: 宋体;">接口的一组类</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections.comparators &#8211; </span><span style="color: navy; font-family: 宋体;">实现</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">java.util.Comparator</span><span style="color: navy; font-family: 宋体;">接口的一组类</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections.functors &#8211; Commons Collections</span><span style="color: navy; font-family: 宋体;">自定义的一组功能类</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections.iterators &#8211; </span><span style="color: navy; font-family: 宋体;">实现</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">java.util.Iterator</span><span style="color: navy; font-family: 宋体;">接口的一组类</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections.keyvalue &#8211; </span><span style="color: navy; font-family: 宋体;">实现集合和键</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">/</span><span style="color: navy; font-family: 宋体;">值映射相关的一组类</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections.list &#8211; </span><span style="color: navy; font-family: 宋体;">实现</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">java.util.List</span><span style="color: navy; font-family: 宋体;">接口的一组类</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections.map &#8211; </span><span style="color: navy; font-family: 宋体;">实现</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Map</span><span style="color: navy; font-family: 宋体;">系列接口的一组类</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections.set &#8211; </span><span style="color: navy; font-family: 宋体;">实现</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Set</span><span style="color: navy; font-family: 宋体;">系列接口的一组类</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">用过</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java Collections API</span><span style="font-family: 宋体;">的朋友大概或多或少会同意我如下的划分：在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collections API</span><span style="font-family: 宋体;">中，不狭义的区分语法上的接口和类，把它们都看作是类的话，大致我们可以发现三种主要的类别：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">1- </span><span style="font-family: 宋体;">容器类：如</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collection</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">List</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Map</span><span style="font-family: 宋体;">等，用于存放对象和进行简单操作的；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">2- </span><span style="font-family: 宋体;">操作类：如</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collections</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Arrays</span><span style="font-family: 宋体;">等，用于对容器类的实例进行相对复杂操作如排序等；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">3- </span><span style="font-family: 宋体;">辅助类：如</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Iterator</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Comparator</span><span style="font-family: 宋体;">等，用于辅助操作类以及外部调用代码实现对容器类的操作，所谓辅助，概括而通俗的来讲，就是这些类提供一种算法，你给它一个对象或者一组对象，或者仅仅是按一定的规则调用它，它给你一个运算后的答案，帮助你正确处理容器对象。比如</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Iterator</span><span style="font-family: 宋体;">会告诉你容器中下一个对象有没有、是什么，而</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Comparator</span><span style="font-family: 宋体;">将对象大小</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">/</span><span style="font-family: 宋体;">先后次序的算法逻辑独立出来。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">同样，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Jakarta Commons Collections</span><span style="font-family: 宋体;">我们细细看来，也能够找出类似的划分：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">1- </span><span style="font-family: 宋体;">作为容器类的补充，我们可以找到</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Bag</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Buffer</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BidiMap</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">OrderedMap</span><span style="font-family: 宋体;">等等；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">2- </span><span style="font-family: 宋体;">作为操作类的补充，我们可以找到</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">CollectionUtils</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">IteratorUtils</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ListUtils</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">SetUtils</span><span style="font-family: 宋体;">等等；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">3- </span><span style="font-family: 宋体;">作为辅助类的补充，我们可以找到</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">MapIterator</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Closure</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Transformer</span><span style="font-family: 宋体;">等等；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">对于这样的一个大包，当然不可能一个类一个类的讲了，找一些常用的和有用的当做接下来讨论的话题吧。大概列个清单：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">Bag<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">HashBag<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">BagUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">Buffer<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">BlockingBuffer<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">BoundedFifoBuffer<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">PriorityBuffer<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">BufferUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">MultiMap<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">BidiMap<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">CaseInsensitiveMap<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">LazyMap<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">MapUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">TypedCollection<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">CollectionUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">ReverseComparator<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">ComparatorChain<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">NullComparator<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">FixedOrderComparator<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">ComparatorUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">Predicate<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">AndPredicate<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">OrPredicate<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">AllPredicate<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">OnePredicate<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">NonePredicate<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">PredicateUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">Transformer<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">ChainedTransformer<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">SwitchTransformer<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">TransformerUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">Closure<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">ChainedClosure<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">IfClosure<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">WhileClosure<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">ClosureUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">LoopingIterator<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">ArrayListIterator<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">FilterIterator<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">UniqueFilterIterator<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">IteratorUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 宋体;">总共</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">9</span><span style="font-family: 宋体;">组，在接下来的笔记中我们一起慢慢的看。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:42 <a href="http://www.blogjava.net/coolingverse/articles/148139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] Commons Collections - Bag组</title><link>http://www.blogjava.net/coolingverse/articles/148140.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:42:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148140.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148140.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148140.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148140.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">首先来看</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Bag</span><span style="font-family: 宋体;">组。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Bag<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">HashBag<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">BagUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">Bag</span><span style="font-family: 宋体;">是在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections</span><span style="font-family: 宋体;">包中定义的接口，它</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">extends java.util.Collection</span><span style="font-family: 宋体;">，而它的实现类都被放在下面的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">bag</span><span style="font-family: 宋体;">包中。之所以有这样一组类型，是因为我们有时候需要在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collection</span><span style="font-family: 宋体;">中存放多个相同对象的拷贝，并且需要很方便的取得该对象拷贝的个数。需要注意的一点是它虽然</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">extends Collection</span><span style="font-family: 宋体;">，但是如果真把它完全当作</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">java.util.Collection</span><span style="font-family: 宋体;">来用会遇到语义上的问题，详细信息参考</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Javadoc</span><span style="font-family: 宋体;">。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">HashBag</span><span style="font-family: 宋体;">是</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Bag</span><span style="font-family: 宋体;">接口的一个标准实现。而</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BagUtils</span><span style="font-family: 宋体;">提供一组</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">static</span><span style="font-family: 宋体;">的方法让调用者获取经过不同装饰后的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Bag</span><span style="font-family: 宋体;">实例。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">还是举例子来看：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #3366ff; font-family: 'Courier New';" lang="EN-US">/** Book.java */<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.commons.collections;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.builder.ToStringBuilder;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.builder.ToStringStyle;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> Book {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> String name;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> String isbn;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> <strong><span style="color: navy;">double</span></strong> retailPrice;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> Book() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> Book(String name, String isbn, <strong><span style="color: navy;">double</span></strong> retailPrice) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.name = name;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.isbn = isbn;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.retailPrice = retailPrice;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> String toString() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return <strong><span style="color: navy;">new</span></strong> ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.append(<span style="color: blue;">"name"</span>, name)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.append(<span style="color: blue;">"ISBN"</span>, isbn)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.append(<span style="color: blue;">"retailPrice"</span>, retailPrice)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.toString();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> String getIsbn() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> isbn;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setIsbn(String isbn) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.isbn = isbn;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> String getName() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> name;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setName(String name) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.name = name;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">double</span></strong> getRetailPrice() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> retailPrice;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setRetailPrice(<strong><span style="color: navy;">double</span></strong> retailPrice) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.retailPrice = retailPrice;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #3366ff; font-family: 'Courier New';" lang="EN-US">/** BagUsage.java */<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.commons.collections;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.Bag;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.BagUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.collections.bag.HashBag;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.StringUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> BagUsage {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> main(String[] args) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoBagUsage();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoBagUsage() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoBagUsage "</span>, 40, <span style="color: blue;">"="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// data setup<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Book book1 = <strong><span style="color: navy;">new</span></strong> Book(<span style="color: blue;">"Refactoring Workbook"</span>, <span style="color: blue;">"7-5083-2208-8"</span>, 29.8);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Book book2 = <strong><span style="color: navy;">new</span></strong> Book(<span style="color: blue;">"J2EE Design Patterns"</span>, <span style="color: blue;">"7-5083-3099-4"</span>, 45);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Book book3 = <strong><span style="color: navy;">new</span></strong> Book(<span style="color: blue;">"Agile Software Development"</span>, <span style="color: blue;">"7-5083-1503-0"</span>, 59);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// create a bag<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Bag myBag = BagUtils.typedBag(<strong><span style="color: navy;">new</span></strong> HashBag(), Book.<strong><span style="color: navy;">class</span></strong>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>myBag.add(book1, 360);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>myBag.add(book2, 500);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>myBag.add(book3, 170);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// calculations for a bag<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">double</span></strong> price1 = book1.getRetailPrice();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">double</span></strong> price2 = book2.getRetailPrice();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">double</span></strong> price3 = book3.getRetailPrice();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">int</span></strong> book1Count = myBag.getCount(book1);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">int</span></strong> book2Count = myBag.getCount(book2);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">int</span></strong> book3Count = myBag.getCount(book3);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">double</span></strong> totalValue = (price1 * book1Count) + (price2 * book2Count)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ (price3 * book3Count);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// dispaly results<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"There are "</span> + book1Count + <span style="color: blue;">" copies of "</span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ book1.getName() + <span style="color: blue;">"."</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"There are "</span> + book2Count + <span style="color: blue;">" copies of "</span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ book2.getName() +<span style="color: blue;"> "."</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"There are "</span> + book3Count + <span style="color: blue;">" copies of "</span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ book3.getName() + <span style="color: blue;">"."</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"The total value of these books is: "</span> + totalValue);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">以下是运行结果：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">============= demoBagUsage =============</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">There are 360 copies of Refactoring Workbook.</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">There are 500 copies of J2EE Design Patterns.</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">There are 170 copies of Agile Software Development.</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">The total value of these books is: 43258.0</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 宋体;">需要说明的是，以上的代码仅仅为了演示如何使用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Bag</span><span style="font-family: 宋体;">，实际应用不建议像这样硬编码。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:42 <a href="http://www.blogjava.net/coolingverse/articles/148140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] Commons BeanUtils</title><link>http://www.blogjava.net/coolingverse/articles/148137.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:41:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148137.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148137.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148137.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148137.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148137.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">Jakarta Commons</span><span style="font-family: 宋体;">项目提供了相当丰富的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">，我们之前了解到的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Lang</span><span style="font-family: 宋体;">只是众多</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">的比较核心的一小部分而已。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons</span><span style="font-family: 宋体;">下面还有相当数量的子项目，用于解决各种各样不同方向的实际问题，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BeanUtils</span><span style="font-family: 宋体;">就是其中的一个，用于处理</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JavaBeans</span><span style="font-family: 宋体;">。它利用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">的反射机制，从动态的生成对</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">bean</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">getter</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">setter</span><span style="font-family: 宋体;">的调用代码，到模拟创建一个动态的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">bean</span><span style="font-family: 宋体;">，等等。这个包看似简单，却是很多开源项目的基石：如在著名的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Struts</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Spring Framework</span><span style="font-family: 宋体;">中，我们都能找到</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BeanUtils</span><span style="font-family: 宋体;">的影子。大家猜猜看，有哪位名人是</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BeanUtils</span><span style="font-family: 宋体;">的作者之一？没错，就是</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Struts</span><span style="font-family: 宋体;">的创始人</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Craig McClanahan</span><span style="font-family: 宋体;">。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">BeanUtils</span><span style="font-family: 宋体;">最核心的好处在于：我们在编码时，并不需要知道我们处理的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JavaBeans</span><span style="font-family: 宋体;">具体是什么类型，有哪些属性，这些信息是可以动态获取的，甚至我们都可以不必去关心事实上是否存在这样一个具体的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JavaBean</span><span style="font-family: 宋体;">类。我们只需要知道有一个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JavaBean</span><span style="font-family: 宋体;">的实例，我们需要从中取得某个属性，设定某个属性的值，或者仅仅是需要一个属性表。要做到这些，依靠</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Sun</span><span style="font-family: 宋体;">提供的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JavaBean</span><span style="font-family: 宋体;">规范似乎找不到一个很直接的方式，除非硬编码，将</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">getXxxx()</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">setXxxx()</span><span style="font-family: 宋体;">直接写进我们的程序。但是这样就大大增加了代码的复杂度、耦合性和维护成本。还好</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons BeanUtils</span><span style="font-family: 宋体;">对这个问题提供了一种优雅的解决方案。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">我们有两种途径获取</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons BeanUtils</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">binary</span><span style="font-family: 宋体;">：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">1- </span><span style="font-family: 宋体;">从</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Struts</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Spring</span><span style="font-family: 宋体;">或者任何依赖</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BeanUtils</span><span style="font-family: 宋体;">的开源产品的发行包中找到相应的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">jar</span><span style="font-family: 宋体;">文件；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">2- </span><span style="font-family: 宋体;">从</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><a href="http://www.apache.org/dist/jakarta/commons/beanutils/binaries/">http://www.apache.org/dist/jakarta/commons/beanutils/binaries/</a></span><span style="font-family: 宋体;">下载。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons BeanUtils</span><span style="font-family: 宋体;">的源码下载地址：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><a href="http://www.apache.org/dist/jakarta/commons/beanutils/source/">http://www.apache.org/dist/jakarta/commons/beanutils/source/</a><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons BeanUtils</span><span style="font-family: 宋体;">一共包括如下</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">5</span><span style="font-family: 宋体;">个包：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.beanutils &#8211; </span><span style="color: navy; font-family: 宋体;">核心包，定义一组</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Utils</span><span style="color: navy; font-family: 宋体;">类和需要用到的接口规范</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.beanutils.converters &#8211; </span><span style="color: navy; font-family: 宋体;">转换</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">String</span><span style="color: navy; font-family: 宋体;">到需要类型的类，实现</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Converter</span><span style="color: navy; font-family: 宋体;">接口</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.beanutils.locale &#8211; beanutils</span><span style="color: navy; font-family: 宋体;">的</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">locale</span><span style="color: navy; font-family: 宋体;">敏感版本</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.beanutils.locale.converters &#8211; converters</span><span style="color: navy; font-family: 宋体;">的</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">locale</span><span style="color: navy; font-family: 宋体;">敏感版本</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.collections &#8211; beanutils</span><span style="color: navy; font-family: 宋体;">使用到的</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Collection</span><span style="color: navy; font-family: 宋体;">类</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">其中需要我们特别关注的是这个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.beanutils</span><span style="font-family: 宋体;">包，其他包都是起辅助作用的。接下来我们就仔细看一看这个包都有些什么东东：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-family: 'Trebuchet MS';" lang="EN-US">[4</span></strong><strong><span style="font-family: 宋体;">个接口</span></strong><strong><span style="font-family: 'Trebuchet MS';" lang="EN-US">]<o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">Converter<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">该接口定义了如下方法：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public java.lang.Object convert(java.lang.Class type, java.lang.Object value);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">只要实现了这个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Converter</span><span style="font-family: 宋体;">接口并注册到</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ConvertUtils</span><span style="font-family: 宋体;">类即可被我们的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BeanUtils</span><span style="font-family: 宋体;">包所使用，它的主要目的是提供将给定的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Object</span><span style="font-family: 宋体;">实例转换为目标类型的算法。我们可以在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">beanutils.converters</span><span style="font-family: 宋体;">包中找到相当多的已经实现的转换器。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaBean<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">该接口定义的是一个动态的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JavaBean</span><span style="font-family: 宋体;">，它的属性类型、名称和值都是可以动态改变的。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaClass<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">该接口定义的是针对实现了</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaBean</span><span style="font-family: 宋体;">接口的类的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">java.lang.Class</span><span style="font-family: 宋体;">对象，提供如</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">getName()</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">newInstance()</span><span style="font-family: 宋体;">等方法。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">MutableDynaClass<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">该接口是对</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaClass</span><span style="font-family: 宋体;">的扩展，使得动态</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">bean</span><span style="font-family: 宋体;">的属性可以动态增加或删除。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-family: 'Trebuchet MS';" lang="EN-US">[24</span></strong><strong><span style="font-family: 宋体;">个类</span></strong><strong><span style="font-family: 'Trebuchet MS';" lang="EN-US">]<o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">BasicDynaBean<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaBean</span><span style="font-family: 宋体;">接口的最精简实现</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">BasicDynaClass<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaClass</span><span style="font-family: 宋体;">接口的最精简实现</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">BeanUtils<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">提供通过反射机制填写</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JavaBeans</span><span style="font-family: 宋体;">属性的工具</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">/</span><span style="font-family: 宋体;">静态方法</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">BeanUtilsBean<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">BeanUtils</span><span style="font-family: 宋体;">类的实例化实现，区别于</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BeanUtils</span><span style="font-family: 宋体;">的静态方法方式，使得自定义的配置得以保持</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">ConstructorUtils<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">同</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">MethodUtils</span><span style="font-family: 宋体;">类似，不过专注于构造方法</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">ContextClassLoaderLocal<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">针对每个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">classloader</span><span style="font-family: 宋体;">的唯一标识</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">ConvertingWrapDynaBean<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">包含了标准</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JavaBean</span><span style="font-family: 宋体;">实例的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaBean</span><span style="font-family: 宋体;">实现，使得我们可以使用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaBean</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">来访问起属性，同时提供设定属性时的类型转换，继承自并区别于</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">WrapDynaBean<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">ConvertUtils<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">提供工具</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">/</span><span style="font-family: 宋体;">静态方法，用于将</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">String</span><span style="font-family: 宋体;">对象及其数组转换为指定的类型的对象及其数组。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">ConvertUtilsBean<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">ConvertUtils</span><span style="font-family: 宋体;">类的实例化实现，区别于</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ConvertUtils</span><span style="font-family: 宋体;">的静态方法方式，使得自定义的配置得以保持</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaProperty<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">用于描述</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaBean</span><span style="font-family: 宋体;">的属性</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">JDBCDynaClass<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">为</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaClass</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JDBC</span><span style="font-family: 宋体;">实现提供公用的逻辑</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">LazyDynaBean<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">懒载入</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaBean</span><span style="font-family: 宋体;">，自动往</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaClass</span><span style="font-family: 宋体;">添加属性并提供懒载入</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">List</span><span style="font-family: 宋体;">和懒载入</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Map</span><span style="font-family: 宋体;">的功能</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">LazyDynaClass<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">实现</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">MutableDynaClass</span><span style="font-family: 宋体;">接口的类</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">LazyDynaMap<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">为</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Map</span><span style="font-family: 宋体;">实例提供一个轻量级的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaBean</span><span style="font-family: 宋体;">包装</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">MappedPropertyDescriptor<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">用于描述映射的属性</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">MethodUtils<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">包含了针对一般意义上的方法而非特定属性的反射工具</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">/</span><span style="font-family: 宋体;">静态方法</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">MethodUtils.MethodDescriptor<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">描述通过反射查找某个方法所使用的键值</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">PropertyUtils<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">提供利用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">反射</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">调用具体对象的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">getter</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">setter</span><span style="font-family: 宋体;">的工具</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">/</span><span style="font-family: 宋体;">静态方法</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">PropertyUtilsBean<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">PropertyUtils</span><span style="font-family: 宋体;">类的实例化实现，区别于</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">PropertyUtils</span><span style="font-family: 宋体;">的静态方法方式，使得自定义的配置得以保持</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">ResultSetDynaClass<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">包装</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">java.sql.ResultSet</span><span style="font-family: 宋体;">中的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">java.sql.Row</span><span style="font-family: 宋体;">实例的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaBean</span><span style="font-family: 宋体;">所对应的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaClass</span><span style="font-family: 宋体;">实现</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">ResultSetIterator<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">针对</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ResultSetDynaClass</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">java.util.Iterator</span><span style="font-family: 宋体;">实现</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">RowSetDynaClass<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaClass</span><span style="font-family: 宋体;">的一种实现，用于在内存中创建一组表示</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">SQL</span><span style="font-family: 宋体;">查询结果的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaBeans</span><span style="font-family: 宋体;">，区别于</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ResultSetDynaClass</span><span style="font-family: 宋体;">，它不需要保持</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ResultSet</span><span style="font-family: 宋体;">打开</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">WrapDynaBean<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaBean</span><span style="font-family: 宋体;">的一种实现，包含一个标准的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JavaBean</span><span style="font-family: 宋体;">实例，以便我们可以使用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaBean</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">去访问它的属性，区别于</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ConvertingWrapDynaBean</span><span style="font-family: 宋体;">，它不做专门的类型转换</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><u><span style="font-family: 'Trebuchet MS';" lang="EN-US">WrapDynaClass<o:p></o:p></span></u></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaClass</span><span style="font-family: 宋体;">的一种实现，针对那些包装标准</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JavaBean</span><span style="font-family: 宋体;">实例的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaBeans<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-family: 'Trebuchet MS';" lang="EN-US">[3</span></strong><strong><span style="font-family: 宋体;">个</span></strong><strong><span style="font-family: 'Trebuchet MS';" lang="EN-US">Exception]<o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">（略）</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">看到这么多东西是不是有点头晕？不要慌，看几个例子就明白了。只要把握好</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BeanUtils</span><span style="font-family: 宋体;">本身要完成的事，就不难理解这些类存在的道理。我们不妨把</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BeanUtils</span><span style="font-family: 宋体;">的基础应用分解成：访问</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JavaBean</span><span style="font-family: 宋体;">的属性、设定</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JavaBean</span><span style="font-family: 宋体;">的属性、以及创建和使用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaBeans</span><span style="font-family: 宋体;">。这样来看</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BeanUtils</span><span style="font-family: 宋体;">，你就会觉得简单清晰得多。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 'Trebuchet MS';" lang="EN-US">// </span><span style="font-family: 宋体;">例子将在下一节单独放出。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:41 <a href="http://www.blogjava.net/coolingverse/articles/148137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] 代码范例 - BeanUtils</title><link>http://www.blogjava.net/coolingverse/articles/148138.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:41:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148138.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148138.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148138.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148138.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148138.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">假定我们有如下两个标准的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JavaBean</span><span style="font-family: 宋体;">：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #3366ff; font-family: 'Courier New';" lang="EN-US">/** Address.java */<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.commons.beanutils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> Address {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> String zipCode;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> String addr;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> String city;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> String country;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> Address() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> Address(String zipCode, String addr, String city, String country) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.zipCode = zipCode;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.addr = addr;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.city = city;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.country = country;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> String getAddr() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> addr;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setAddr(String addr) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.addr = addr;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> String getCity() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> city;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setCity(String city) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.city = city;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> String getCountry() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> country;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setCountry(String country) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.country = country;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> String getZipCode() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> zipCode;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setZipCode(String zipCode) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.zipCode = zipCode;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: #3366ff; font-family: 'Courier New';" lang="EN-US">/** Customer.java */<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.commons.beanutils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> Customer {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> <strong><span style="color: navy;">long</span></strong> id;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> String name;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> Address[] addresses;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> Customer() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> Customer(<strong><span style="color: navy;">long</span></strong> id, String name, Address[] addresses) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.id = id;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.name = name;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.addresses = addresses;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> Address[] getAddresses() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> addresses;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setAddresses(Address[] addresses) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.addresses = addresses;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">long</span></strong> getId() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> id;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setId(<strong><span style="color: navy;">long</span></strong> id) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.id = id;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> String getName() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> name;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setName(String name) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.name = name;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">我们来看看通常我们是怎样利用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons BeanUtils</span><span style="font-family: 宋体;">来完成一些基本的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JavaBean</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaBean</span><span style="font-family: 宋体;">操作：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.commons.beanutils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.beanutils.BasicDynaBean;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.beanutils.BasicDynaClass;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.beanutils.DynaBean;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.beanutils.DynaProperty;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.beanutils.PropertyUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.StringUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> BeanUtilsUsage {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> main(String[] args) <strong><span style="color: navy;">throws</span></strong> Exception {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoNormalJavaBeans();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoDynaBeans();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoNormalJavaBeans() <strong><span style="color: navy;">throws</span></strong> Exception {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoNormalJavaBeans "</span>, 40,<span style="color: blue;"> "="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// data setup<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Address addr1 = <strong><span style="color: navy;">new</span></strong> Address(<span style="color: blue;">"CA1234"</span>, <span style="color: blue;">"xxx"</span>, <span style="color: blue;">"<st1:city w:st="on">Los Angeles</st1:city>"</span>, <span style="color: blue;">"<st1:country-region w:st="on"><st1:place w:st="on">USA</st1:place></st1:country-region>"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Address addr2 = <strong><span style="color: navy;">new</span></strong> Address(<span style="color: blue;">"100000"</span>, <span style="color: blue;">"xxx"</span>, <span style="color: blue;">"<st1:city w:st="on">Beijing</st1:city>"</span>, <span style="color: blue;">"<st1:country-region w:st="on"><st1:place w:st="on">China</st1:place></st1:country-region>"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Address[] addrs = <strong><span style="color: navy;">new</span></strong> Address[2];<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>addrs[0] = addr1;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>addrs[1] = addr2;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Customer cust = <strong><span style="color: navy;">new</span></strong> Customer(123, <span style="color: blue;">"John Smith"</span>, addrs);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// accessing the city of first address<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String cityPattern = <span style="color: blue;">"addresses[0].city"</span>;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String name = (String) PropertyUtils.getSimpleProperty(cust, <span style="color: blue;">"name"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String city = (String) PropertyUtils.getProperty(cust, cityPattern);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Object[] rawOutput1 = <strong><span style="color: navy;">new</span></strong> Object[] { <span style="color: blue;">"The city of customer "</span>, name,<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue;">"'s first address is "</span>, city, <span style="color: blue;">"."</span> };<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.join(rawOutput1));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// setting the zipcode of customer's second address<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String zipPattern = <span style="color: blue;">"addresses[1].zipCode"</span>;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">if</span></strong> (PropertyUtils.isWriteable(cust, zipPattern)) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Setting zipcode ..."</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>PropertyUtils.setProperty(cust, zipPattern, <span style="color: blue;">"200000"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String zip = (String) PropertyUtils.getProperty(cust, zipPattern);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span>Object[] rawOutput2 = <strong><span style="color: navy;">new</span></strong> Object[] { <span style="color: blue;">"The zipcode of customer "</span>, name,<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue;">"'s second address is now "</span>, zip, <span style="color: blue;">"."</span> };<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.join(rawOutput2));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoDynaBeans() <strong><span style="color: navy;">throws</span></strong> Exception {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoDynaBeans "</span>, 40, <span style="color: blue;">"="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// creating a DynaBean<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>DynaProperty[] dynaBeanProperties = <strong><span style="color: navy;">new</span></strong> DynaProperty[] {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> DynaProperty(<span style="color: blue;">"name"</span>, String.class),<span> </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> DynaProperty(<span style="color: blue;">"inPrice"</span>, Double.class),<span>&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">new</span></strong> DynaProperty(<span style="color: blue;">"outPrice"</span>, Double.class),<span> </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>};<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BasicDynaClass cargoClass = <strong><span style="color: navy;">new</span></strong> BasicDynaClass(<span style="color: blue;">"Cargo"</span>, BasicDynaBean.class, dynaBeanProperties);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>DynaBean cargo = cargoClass.newInstance();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// accessing a DynaBean<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cargo.set(<span style="color: blue;">"name"</span>, <span style="color: blue;">"Instant Noodles"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cargo.set(<span style="color: blue;">"inPrice"</span>, new Double(21.3));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cargo.set(<span style="color: blue;">"outPrice"</span>, new Double(23.8));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"name: "</span> + cargo.get(<span style="color: blue;">"name"</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"inPrice: "</span> + cargo.get(<span style="color: blue;">"inPrice"</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"outPrice: "</span> + cargo.get(<span style="color: blue;">"outPrice"</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">上述代码运行结果如下：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">========= demoNormalJavaBeans ==========</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">The city of customer John Smith's first address is <st1:city w:st="on"><st1:place w:st="on">Los Angeles</st1:place></st1:city>.</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Setting zipcode ...</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">The zipcode of customer John Smith's second address is now 200000.</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">============ demoDynaBeans =============</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">name: Instant Noodles</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">inPrice: 21.3</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">outPrice: 23.8</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 10pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 宋体;">以上代码简单说明了一下</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BeanUtils</span><span style="font-family: 宋体;">常见的基本用法，还有很多高阶或者更具体的应用及原理，这里无法一一讲到，而且有很多笔者也不熟悉、不了解，对</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">BeanUtils</span><span style="font-family: 宋体;">的讲解就到此吧。如果你有兴趣，或者还不是很清楚为什么像这样动态的或者说松散的访问</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">JavaBean</span><span style="font-family: 宋体;">是有必要的，可以把</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Struts</span><span style="font-family: 宋体;">的源码拿下来研究一下，看看</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">FormBean</span><span style="font-family: 宋体;">以及</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">DynaActionForm</span><span style="font-family: 宋体;">这些是如何被动态创建的，一定会有收获。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148138.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:41 <a href="http://www.blogjava.net/coolingverse/articles/148138.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] org.apache.commons.lang.math</title><link>http://www.blogjava.net/coolingverse/articles/148134.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:40:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148134.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148134.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148134.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148134.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Jakarta Commons</span><span style="font-family: 宋体;">中，专门处理数学计算的类分别可以在两个地方找到：一是</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Lang</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.lang.math</span><span style="font-family: 宋体;">包中，二是在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Math</span><span style="font-family: 宋体;">这个单独的子项目中。由于后者主要是处理复数、矩阵等，相对使用比较少，在我的笔记中就只简单讲讲</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Lang</span><span style="font-family: 宋体;">中的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">math</span><span style="font-family: 宋体;">包。对后者感兴趣的可以看看</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><a href="http://jakarta.apache.org/commons/math/">http://jakarta.apache.org/commons/math/</a><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.lang.math</span><span style="font-family: 宋体;">包中共有</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">10</span><span style="font-family: 宋体;">个类，这些类可以归纳成四组：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">1- </span><span style="color: navy; font-family: 宋体;">处理分数的</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Fraction</span><span style="color: navy; font-family: 宋体;">类；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">2- </span><span style="color: navy; font-family: 宋体;">处理数值的</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">NumberUtils</span><span style="color: navy; font-family: 宋体;">类；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">3- </span><span style="color: navy; font-family: 宋体;">处理数值范围的</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Range</span><span style="color: navy; font-family: 宋体;">、</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">NumberRange</span><span style="color: navy; font-family: 宋体;">、</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">IntRange</span><span style="color: navy; font-family: 宋体;">、</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">LongRange</span><span style="color: navy; font-family: 宋体;">、</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">FloatRange</span><span style="color: navy; font-family: 宋体;">、</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">DoubleRange</span><span style="color: navy; font-family: 宋体;">类；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">4- </span><span style="color: navy; font-family: 宋体;">处理随机数的</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">JVMRandom</span><span style="color: navy; font-family: 宋体;">和</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">RandomUtils</span><span style="color: navy; font-family: 宋体;">类。</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">下面我举个例子分别说明上述四组的使用方法：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.jakarta.commons.lang;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.ArrayUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.BooleanUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.StringUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.math.DoubleRange;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.math.Fraction;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.math.NumberUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.math.RandomUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.math.Range;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> LangMathUsage {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> main(String[] args) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoFraction();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoNumberUtils();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoNumberRange();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoRandomUtils();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoFraction() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoFraction "</span>, 30, <span style="color: blue;">"="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Fraction myFraction = Fraction.getFraction(144, 90);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green;">// Fraction myFraction = Fraction.getFraction("1 54/90");<o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"144/90 as fraction: "</span> + myFraction);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"144/90 to proper: "</span> + myFraction.toProperString());<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"144/90 as double: "</span> + myFraction.doubleValue());<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"144/90 reduced: "</span> + myFraction.reduce());<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"144/90 reduced proper: "</span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ myFraction.reduce().toProperString());<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoNumberUtils() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoNumberUtils "</span>, 30, <span style="color: blue;">"="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Is 0x<st1:chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="3" unitname="F">3F</st1:chmetcnv> a number? "</span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ StringUtils.capitalize(BooleanUtils.toStringYesNo(NumberUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.isNumber(<span style="color: blue;">"0x<st1:chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="3" unitname="F">3F</st1:chmetcnv>"</span>))) + <span style="color: blue;">"."</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">double</span></strong>[] array = { 1.0, 3.4, 0.8, 7.1, 4.6 };<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">double</span></strong> max = NumberUtils.max(array);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">double</span></strong> min = NumberUtils.min(array);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String arrayStr = ArrayUtils.toString(array);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Max of "</span> + arrayStr + <span style="color: blue;">" is: "</span> + max);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Min of "</span> + arrayStr + <span style="color: blue;">" is: "</span> + min);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoNumberRange() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoNumberRange "</span>, 30, <span style="color: blue;">"="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Range normalScoreRange = new DoubleRange(90, 120);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">double</span></strong> score1 = 102.5;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">double</span></strong> score2 = 79.9;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"<st1:place w:st="on">Normal</st1:place> score range is: "</span> + normalScoreRange);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Is "</span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ score1<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ <span style="color: blue;">" a normal score? "</span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ StringUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.capitalize(BooleanUtils.toStringYesNo(normalScoreRange<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.containsDouble(score1))) +<span style="color: blue;"> "."</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Is "</span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ score2<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ <span style="color: blue;">" a normal score? "</span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ StringUtils<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.capitalize(BooleanUtils.toStringYesNo(normalScoreRange<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.containsDouble(score2))) + <span style="color: blue;">"."</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoRandomUtils() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoRandomUtils "</span>, 30,<span style="color: blue;"> "="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (int i = 0; i &lt; 5; i++) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(RandomUtils.nextInt(100));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">以下是运行结果：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">======== demoFraction ========</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">144/90 as fraction: 144/90</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">144/90 to proper: 1 54/90</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">144/90 as double: 1.6</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">144/90 reduced: 8/5</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">144/90 reduced proper: 1 3/5</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">====== demoNumberUtils =======</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Is 0x<st1:chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="3" unitname="F">3F</st1:chmetcnv> a number? Yes.</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Max of {1.0,3.4,0.8,7.1,4.6} is: 7.1</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Min of {1.0,3.4,0.8,7.1,4.6} is: 0.8</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">====== demoNumberRange =======</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Normal score range is: Range[90.0,120.0]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Is <st1:chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="True" sourcevalue="102.5" unitname="a">102.5 a</st1:chmetcnv> normal score? Yes.</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Is <st1:chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="True" sourcevalue="79.9" unitname="a">79.9 a</st1:chmetcnv> normal score? No.</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">====== demoRandomUtils =======</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">75</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">63</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">40</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">21</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">92</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 宋体;">以上就是</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Lang</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">math</span><span style="font-family: 宋体;">包通常的用法。提一下</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">NumberUtils.inNumber(String)</span><span style="font-family: 宋体;">方法，它会正确判断出给定的字符串是否是合法的数值，而我在前面的笔记中提到的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">StringUtils.isNumeric(String)</span><span style="font-family: 宋体;">只能判断一个字符串是否是由纯数字字符组成。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Lang</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">math</span><span style="font-family: 宋体;">包的各个类都还有很多实用的方法，远不止我在例子中用到的这些，如果你感兴趣，参照一下</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Lang</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Javadoc</span><span style="font-family: 宋体;">吧。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:40 <a href="http://www.blogjava.net/coolingverse/articles/148134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] org.apache.commons.lang.time</title><link>http://www.blogjava.net/coolingverse/articles/148135.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:40:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148135.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148135.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148135.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148135.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148135.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">好了，来看我在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Common Lang</span><span style="font-family: 宋体;">中最后要讲的一个包：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.lang.time</span><span style="font-family: 宋体;">。这个包里面包含了如下</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">5</span><span style="font-family: 宋体;">个类：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">DateFormatUtils &#8211; </span><span style="color: navy; font-family: 宋体;">提供格式化日期和时间的功能及相关常量；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">DateUtils &#8211; </span><span style="color: navy; font-family: 宋体;">在</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Calendar</span><span style="color: navy; font-family: 宋体;">和</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Date</span><span style="color: navy; font-family: 宋体;">的基础上提供更方便的访问；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">DurationFormatUtils &#8211; </span><span style="color: navy; font-family: 宋体;">提供格式化时间跨度的功能及相关常量；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">FastDateFormat &#8211; </span><span style="color: navy; font-family: 宋体;">为</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">java.text.SimpleDateFormat</span><span style="color: navy; font-family: 宋体;">提供一个的线程安全的替代类；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">StopWatch &#8211; </span><span style="color: navy; font-family: 宋体;">是一个方便的计时器。</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">我们还是在一个例子中来看上述各个类的用法吧：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.jakarta.commons.lang;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> java.util.Calendar;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> java.util.Date;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.StringUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.time.DateFormatUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.time.DateUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.time.FastDateFormat;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.time.StopWatch;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> DateTimeUsage {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> main(String[] args) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoDateUtils();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>demoStopWatch();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoDateUtils() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoDateUtils "</span>, 30, <span style="color: blue;">"="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Date date = <strong><span style="color: navy;">new</span></strong> Date();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String isoDateTime = DateFormatUtils.ISO_DATETIME_FORMAT.format(date);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String isoTime = DateFormatUtils.ISO_TIME_NO_T_FORMAT.format(date);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>FastDateFormat fdf = FastDateFormat.getInstance(<span style="color: blue;">"yyyy-MM"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String customDateTime = fdf.format(date);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"ISO_DATETIME_FORMAT: "</span> + isoDateTime);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"ISO_TIME_NO_T_FORMAT: "</span> + isoTime);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Custom FastDateFormat: "</span> + customDateTime);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Default format: "</span> + date);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Round HOUR: "</span> + DateUtils.round(date, Calendar.HOUR));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Truncate HOUR: "</span> + DateUtils.truncate(date, Calendar.HOUR));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> demoStopWatch() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(StringUtils.center(<span style="color: blue;">" demoStopWatch "</span>, 30, <span style="color: blue;">"="</span>));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>StopWatch sw = new StopWatch();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sw.start();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>operationA();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sw.stop();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"operationA used "</span> + sw.getTime() + <span style="color: blue;">" milliseconds."</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> operationA() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">try</span></strong> {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Thread.sleep(999);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">catch</span></strong> (InterruptedException e) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// do nothing<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">以下是运行结果：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">======= demoDateUtils ========</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">ISO_DATETIME_FORMAT: <st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="8" year="2005">2005-08-01</st1:chsdate>T12:41:51</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">ISO_TIME_NO_T_FORMAT: 12:41:51</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Custom FastDateFormat: 2005-08</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Default format: Mon Aug 01 12:41:51 CST 2005</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Round HOUR: Mon Aug 01 13:00:00 CST 2005</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Truncate HOUR: Mon Aug 01 12:00:00 CST 2005</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">======= demoStopWatch ========</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">operationA used 1000 milliseconds.</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 10pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 宋体;">具体的调用细节和完整的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">请参阅</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Lang</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Javadoc</span><span style="font-family: 宋体;">。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:40 <a href="http://www.blogjava.net/coolingverse/articles/148135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] 代码范例 - StringUtils</title><link>http://www.blogjava.net/coolingverse/articles/148132.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:39:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148132.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148132.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148132.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148132.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148132.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">处理文本对</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">应用来说应该算是家常便饭了，在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">1.4</span><span style="font-family: 宋体;">出现之前，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">自身提供的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">非常有限，如</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">String</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">StringTokenizer</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">StringBuffer</span><span style="font-family: 宋体;">，操作也比较单一。无非就是查找</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">substring</span><span style="font-family: 宋体;">、分解、合并等等。到</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">1.4</span><span style="font-family: 宋体;">的出现可以说</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">的文字处理上了一个台阶，因为它支持</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">regular expression</span><span style="font-family: 宋体;">了。这可是个重量级而方便的东东啊，缺点是太复杂，学习起来有一定难度。相较而言，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Jakarta Commons</span><span style="font-family: 宋体;">提供的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">StringUtils</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">WordUtils</span><span style="font-family: 宋体;">至今还维持着那种简洁而强大的美，使用起来也很顺手。来看一个例子：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.jakarta.commons.lang;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.StringUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> StringUtilsAndWordUtilsUsage {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> main(String[] args) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// data setup<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String str1 = <span style="color: blue;">""</span>;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String str2 = <span style="color: blue;">" "</span>;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String str3 = <span style="color: blue;">"\t"</span>;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String str4 = <strong><span style="color: navy;">null</span></strong>;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String str5 = <span style="color: blue;">"123"</span>;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String str6 = <span style="color: blue;">"ABCDEFG"</span>;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String str7 = <span style="color: blue;">"It feels good to use <st1:city w:st="on"><st1:place w:st="on">Jakarta</st1:place></st1:city> Commons.\r\n"</span>;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// check for empty strings<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"=============================="</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Is str1 blank? "</span> + StringUtils.isBlank(str1));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Is str2 blank? "</span> + StringUtils.isBlank(str2));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Is str3 blank? "</span> + StringUtils.isBlank(str3));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Is str4 blank? "</span> + StringUtils.isBlank(str4));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// check for numerics<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"=============================="</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Is str5 numeric? "</span> + StringUtils.isNumeric(str5));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"Is str6 numeric? "</span> + StringUtils.isNumeric(str6));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// reverse strings / whole words<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"=============================="</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"str6: "</span> + str6);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"str6 reversed: "</span> + StringUtils.reverse(str6));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"str7: "</span> + str7);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String str8 = StringUtils.chomp(str7);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>str8 = StringUtils.reverseDelimited(str8, <span style="color: blue;">' '</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"str7 reversed whole words : \r\n"</span> + str8);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// build header (useful to print log messages that are easy to locate)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"=============================="</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"print header:"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String padding = StringUtils.repeat(<span style="color: blue;">"="</span>, 50);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String msg = StringUtils.center(<span style="color: blue;">" Customised Header "</span>, 50, <span style="color: blue;">"%"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Object[] raw = <strong><span style="color: navy;">new</span></strong> Object[]{padding, msg, padding};<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String header = StringUtils.join(raw, <span style="color: blue;">"\r\n"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(header);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">输出的结果如下：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">==============================</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Is str1 blank? true</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Is str2 blank? true</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Is str3 blank? true</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Is str4 blank? true</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">==============================</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Is str5 numeric? true</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Is str6 numeric? false</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">==============================</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">str6: ABCDEFG</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">str6 reversed: GFEDCBA</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">str7: It feels good to use Jakarta Commons.</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">str7 reversed whole words : </span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">Commons. <st1:city w:st="on"><st1:place w:st="on">Jakarta</st1:place></st1:city> use to good feels It</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">==============================</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">print header:</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">==================================================</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">%%%%%%%%%%%%%%% Customised Header %%%%%%%%%%%%%%%%</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">==================================================</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 宋体;">从代码中我们可以大致了解到这个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">StringUtils</span><span style="font-family: 宋体;">类简单而强大的处理能力，从检查空串（对</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">null</span><span style="font-family: 宋体;">的情况处理很得体），到分割子串，到生成格式化的字符串，使用都很简洁，也很直截了当。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148132.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:39 <a href="http://www.blogjava.net/coolingverse/articles/148132.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] org.apache.commons.lang.builder</title><link>http://www.blogjava.net/coolingverse/articles/148133.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:39:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148133.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148133.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148133.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148133.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148133.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">在前面的专题文章中，我们一起过了一遍</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.lang</span><span style="font-family: 宋体;">包，接下来我们继续看</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.lang.builder</span><span style="font-family: 宋体;">这个包。在这里面我们可以找到</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">7</span><span style="font-family: 宋体;">个类，用于帮助我们实现</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">对象的一些基础的共有方法。这</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">7</span><span style="font-family: 宋体;">个类分别是：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">CompareToBuilder &#8211; </span><span style="color: navy; font-family: 宋体;">用于辅助实现</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Comparable.compareTo(Object)</span><span style="color: navy; font-family: 宋体;">方法；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">EqualsBuilder &#8211; </span><span style="color: navy; font-family: 宋体;">用于辅助实现</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Object.equals()</span><span style="color: navy; font-family: 宋体;">方法；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">HashCodeBuilder &#8211; </span><span style="color: navy; font-family: 宋体;">用于辅助实现</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Object.hashCode()</span><span style="color: navy; font-family: 宋体;">方法；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ToStringBuilder &#8211; </span><span style="color: navy; font-family: 宋体;">用于辅助实现</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Object.toString()</span><span style="color: navy; font-family: 宋体;">方法；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ReflectionToStringBuilder &#8211; </span><span style="color: navy; font-family: 宋体;">使用反射机制辅助实现</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Object.toString()</span><span style="color: navy; font-family: 宋体;">方法；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ToStringStyle &#8211; </span><span style="color: navy; font-family: 宋体;">辅助</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ToStringBuilder</span><span style="color: navy; font-family: 宋体;">控制输出格式；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">StandardToStringStyle &#8211; </span><span style="color: navy; font-family: 宋体;">辅助</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ToStringBuilder</span><span style="color: navy; font-family: 宋体;">控制标准格式。</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">我们知道，在实际应用中，其实经常需要在运行过程中判定对象的知否相等、比较、取</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">hash</span><span style="font-family: 宋体;">、和获取对象基本信息（一般是产生</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">log</span><span style="font-family: 宋体;">日志）。然而实现这些</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">compareTo</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">equals</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">hashCode</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">toString</span><span style="font-family: 宋体;">其实并非那么直截了当，甚至稍有不注意就可能造成难以追踪的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">bug</span><span style="font-family: 宋体;">，而且这些方法手工维护的话，比较繁琐，也容易出错。于是</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Lang</span><span style="font-family: 宋体;">在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">builder</span><span style="font-family: 宋体;">这个包中提供了上述辅助类，为我们简化这些方法的实现和维护。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">来看一个例子：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.jakarta.commons.lang;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> java.util.Date;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.builder.CompareToBuilder;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.builder.EqualsBuilder;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.builder.HashCodeBuilder;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.builder.ToStringBuilder;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.builder.ToStringStyle;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> BuilderUsage {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> main(String[] args) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Staff staff1 = <strong><span style="color: navy;">new</span></strong> Staff(123, <span style="color: blue;">"John Smith"</span>, new Date());<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Staff staff2 = <strong><span style="color: navy;">new</span></strong> Staff(456, <span style="color: blue;">"Jane Smith"</span>, new Date());<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"staff1's info: "</span> + staff1);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"staff2's info: "</span> + staff2);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"staff1's hash code: "</span> + staff1.hashCode());<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"staff2's hash code: "</span> + staff2.hashCode());<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"staff1 equals staff2? "</span> + staff1.equals(staff2));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">class</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> Staff <strong><span style="color: navy;">implements</span></strong> Comparable {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> <strong><span style="color: navy;">long</span></strong> staffId;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> String staffName;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">private</span></strong> Date dateJoined;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> Staff() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> Staff(<strong><span style="color: navy;">long</span></strong> staffId, String staffName, Date dateJoined) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>this.staffId = staffId;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>this.staffName = staffName;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>this.dateJoined = dateJoined;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">int</span></strong> compareTo(Object o) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">int</span></strong> res = -1;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">if</span></strong> (o != <strong><span style="color: navy;">null</span></strong> &amp;&amp; Staff.class.isAssignableFrom(o.getClass())) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Staff s = (Staff) o;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>res = <strong><span style="color: navy;">new</span></strong> CompareToBuilder()<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.append(dateJoined, s.getDateJoined())<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.append(staffName, s.getStaffName()).toComparison();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> res;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">boolean</span></strong> equals(Object o) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">boolean</span></strong> res = false;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">if</span></strong> (o != <strong><span style="color: navy;">null</span></strong> &amp;&amp; Staff.class.isAssignableFrom(o.getClass())) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Staff s = (Staff) o;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>res = <strong><span style="color: navy;">new</span></strong> EqualsBuilder()<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.append(staffId, s.getStaffId())<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.isEquals();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> res;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">int</span></strong> hashCode() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> <strong><span style="color: navy;">new</span></strong> HashCodeBuilder(11, 23).append(staffId).toHashCode();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> String toString() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> <strong><span style="color: navy;">new</span></strong> ToStringBuilder(<strong><span style="color: navy;">this</span></strong>, ToStringStyle.MULTI_LINE_STYLE)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.append(<span style="color: blue;">"staffId"</span>, staffId)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.append(<span style="color: blue;">"staffName"</span>, staffName)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.append(<span style="color: blue;">"dateJoined"</span>, dateJoined)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>.toString();<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> Date getDateJoined() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> dateJoined;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setDateJoined(Date dateJoined) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.dateJoined = dateJoined;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">long</span></strong> getStaffId() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> staffId;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setStaffId(long staffId) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.staffId = staffId;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> String getStaffName() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> staffName;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">void</span></strong> setStaffName(String staffName) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">this</span></strong>.staffName = staffName;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">以下是运行结果：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">staff1's info: sean.study.jakarta.commons.lang.Staff@190d11[</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>staffId=123</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>staffName=John Smith</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>dateJoined=Sat Jul 30 13:18:45 CST 2005</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">staff2's info: sean.study.jakarta.commons.lang.Staff@1fb8ee3[</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>staffId=456</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>staffName=Jane Smith</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US"><span>&nbsp; </span>dateJoined=Sat Jul 30 13:18:45 CST 2005</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">]</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">staff1's hash code: 376</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">staff2's hash code: 709</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">staff1 equals staff2? false</span><span style="font-size: 9pt; color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">这些</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">builder</span><span style="font-family: 宋体;">使用起来都很简单，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">new</span><span style="font-family: 宋体;">一个实例，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">append</span><span style="font-family: 宋体;">需要参与的信息，最后加上</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">toComparison</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">isEquals</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">toHashCode</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">toString</span><span style="font-family: 宋体;">这样的结尾即可。相应的，如果你不需要这样级别的控制，也可以使用利用反射机制的版本自动化实现需要的功能，如：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">int</span></strong> compareTo(Object o) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> CompareToBuilder.reflectionCompare(<strong><span style="color: navy;">this</span></strong>, o);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">boolean</span></strong> equals(Object o) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> EqualsBuilder.reflectionEquals(<strong><span style="color: navy;">this</span></strong>, o);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">int</span></strong> hashCode() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> HashCodeBuilder.reflectionHashCode(<strong><span style="color: navy;">this</span></strong>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> String toString() {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">return</span></strong> ReflectionToStringBuilder.toString(<strong><span style="color: navy;">this</span></strong>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 宋体;">尤其当我们在项目中不希望过多的参与到对这些对象方法的维护时，采用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons</span><span style="font-family: 宋体;">提供的利用反射的这些</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">就成了方便而相对安全的一个方案。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148133.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:39 <a href="http://www.blogjava.net/coolingverse/articles/148133.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] org.apache.commons.lang</title><link>http://www.blogjava.net/coolingverse/articles/148130.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:38:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148130.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148130.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148130.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148130.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148130.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">我们首先来看</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.lang</span><span style="font-family: 宋体;">包，这个包提供了一些有用的包含</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">static</span><span style="font-family: 宋体;">方法的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Util</span><span style="font-family: 宋体;">类。除了</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">6</span><span style="font-family: 宋体;">个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Exception</span><span style="font-family: 宋体;">类和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">2</span><span style="font-family: 宋体;">个已经</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">deprecated</span><span style="font-family: 宋体;">的数字类之外，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">commons.lang</span><span style="font-family: 宋体;">包共包含了</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">17</span><span style="font-family: 宋体;">个实用的类：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ArrayUtils &#8211; </span><span style="color: navy; font-family: 宋体;">用于对数组的操作，如添加、查找、删除、子数组、倒序、元素类型转换等；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">BitField &#8211; </span><span style="color: navy; font-family: 宋体;">用于操作位元，提供了一些方便而安全的方法；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">BooleanUtils &#8211; </span><span style="color: navy; font-family: 宋体;">用于操作和转换</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">boolean</span><span style="color: navy; font-family: 宋体;">或者</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Boolean</span><span style="color: navy; font-family: 宋体;">及相应的数组；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">CharEncoding &#8211; </span><span style="color: navy; font-family: 宋体;">包含了</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="color: navy; font-family: 宋体;">环境支持的字符编码，提供是否支持某种编码的判断；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">CharRange &#8211; </span><span style="color: navy; font-family: 宋体;">用于设定字符范围并做相应检查；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">CharSet &#8211; </span><span style="color: navy; font-family: 宋体;">用于设定一组字符作为范围并做相应检查；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">CharSetUtils &#8211; </span><span style="color: navy; font-family: 宋体;">用于操作</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">CharSet</span><span style="color: navy; font-family: 宋体;">；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">CharUtils &#8211; </span><span style="color: navy; font-family: 宋体;">用于操作</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">char</span><span style="color: navy; font-family: 宋体;">值和</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Character</span><span style="color: navy; font-family: 宋体;">对象；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ClassUtils &#8211; </span><span style="color: navy; font-family: 宋体;">用于对</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="color: navy; font-family: 宋体;">类的操作，不使用反射；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">ObjectUtils &#8211; </span><span style="color: navy; font-family: 宋体;">用于操作</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="color: navy; font-family: 宋体;">对象，提供</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">null</span><span style="color: navy; font-family: 宋体;">安全的访问和其他一些功能；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">RandomStringUtils &#8211; </span><span style="color: navy; font-family: 宋体;">用于生成随机的字符串；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">SerializationUtils &#8211; </span><span style="color: navy; font-family: 宋体;">用于处理对象序列化，提供比一般</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="color: navy; font-family: 宋体;">序列化更高级的处理能力；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">StringEscapeUtils &#8211; </span><span style="color: navy; font-family: 宋体;">用于正确处理转义字符，产生正确的</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="color: navy; font-family: 宋体;">、</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">JavaScript</span><span style="color: navy; font-family: 宋体;">、</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">HTML</span><span style="color: navy; font-family: 宋体;">、</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">XML</span><span style="color: navy; font-family: 宋体;">和</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">SQL</span><span style="color: navy; font-family: 宋体;">代码；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">StringUtils &#8211; </span><span style="color: navy; font-family: 宋体;">处理</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">String</span><span style="color: navy; font-family: 宋体;">的核心类，提供了相当多的功能；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">SystemUtils &#8211; </span><span style="color: navy; font-family: 宋体;">在</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">java.lang.System</span><span style="color: navy; font-family: 宋体;">基础上提供更方便的访问，如用户路径、</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="color: navy; font-family: 宋体;">版本、时区、操作系统等判断；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">Validate &#8211; </span><span style="color: navy; font-family: 宋体;">提供验证的操作，有点类似</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">assert</span><span style="color: navy; font-family: 宋体;">断言；</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">WordUtils &#8211; </span><span style="color: navy; font-family: 宋体;">用于处理单词大小写、换行等。</span><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 宋体;">接下来我准备用两个例子来分别说明</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ArrayUtils</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">StringUtils</span><span style="font-family: 宋体;">的常见用法。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:38 <a href="http://www.blogjava.net/coolingverse/articles/148130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] 代码范例 - ArrayUtils</title><link>http://www.blogjava.net/coolingverse/articles/148131.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:38:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148131.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148131.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148131.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148131.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148131.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">数组是我们经常需要使用到的一种数据结构，但是由于</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">本身并没有提供很好的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">支持，使得很多操作实际上做起来相当繁琐，以至于我们实际编码中甚至会不惜牺牲性能去使用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collections API</span><span style="font-family: 宋体;">，用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Collection</span><span style="font-family: 宋体;">当然能够很方便的解决我们的问题，但是我们一定要以性能为代价吗？</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ArrayUtils</span><span style="font-family: 宋体;">帮我们解决了处理类似情况的大部分问题。来看一个例子：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">package</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> sean.study.jakarta.commons.lang;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> java.util.Map;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">import</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> org.apache.commons.lang.ArrayUtils;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US">public</span></strong><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"> <strong><span style="color: navy;">class</span></strong> ArrayUtilsUsage {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">public</span></strong> <strong><span style="color: navy;">static</span></strong> <strong><span style="color: navy;">void</span></strong> main(String[] args) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// data setup<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">int</span></strong>[] intArray1 = { 2, 4, 8, 16 };<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="color: navy;">int</span></strong>[][] intArray2 = { { 1, 2 }, { 2, 4 }, { 3, 8 }, { 4, 16 } };<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Object[][] notAMap = { <o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{ <span style="color: blue;">"A"</span>, <strong><span style="color: navy;">new</span></strong> Double(100) },<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{ <span style="color: blue;">"B"</span>, <strong><span style="color: navy;">new</span></strong> Double(80) }, <o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{ <span style="color: blue;">"C"</span>, <strong><span style="color: navy;">new</span></strong> Double(60) },<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{ <span style="color: blue;">"D"</span>, <strong><span style="color: navy;">new</span></strong> Double(40) }, <o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{ <span style="color: blue;">"E"</span>, <strong><span style="color: navy;">new</span></strong> Double(20) } <o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>};<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// printing arrays<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"intArray1: "</span> + ArrayUtils.toString(intArray1));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"intArray2: "</span> + ArrayUtils.toString(intArray2));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"notAMap: "</span> + ArrayUtils.toString(notAMap));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// finding items<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"intArray1 contains '8'? "</span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ ArrayUtils.contains(intArray1, 8));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"intArray1 index of '8'? "</span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ ArrayUtils.indexOf(intArray1, 8));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"intArray1 last index of '8'? "</span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ ArrayUtils.lastIndexOf(intArray1, 8));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// cloning and resversing<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int[] intArray3 = ArrayUtils.clone(intArray1);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"intArray3: "</span> + ArrayUtils.toString(intArray3));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ArrayUtils.reverse(intArray3);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"intArray3 reversed: "</span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ ArrayUtils.toString(intArray3));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// primitive to Object array<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Integer[] integerArray1 = ArrayUtils.toObject(intArray1);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"integerArray1: "</span><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>+ ArrayUtils.toString(integerArray1));<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; color: green; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// build Map from two dimensional array<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Map map = ArrayUtils.toMap(notAMap);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Double res = (Double) map.get(<span style="color: blue;">"C"</span>);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(<span style="color: blue;">"get 'C' from map: "</span> + res);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: 9pt; font-family: 'Courier New';" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">以下是运行结果：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">intArray1: {2,4,8,16}</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">intArray2: {{1,2},{2,4},{3,8},{4,16}}</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">notAMap: {{A,100.0},{B,80.0},{C,60.0},{D,40.0},{E,20.0}}</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">intArray1 contains '8'? true</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">intArray1 index of '8'? 2</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">intArray1 last index of '8'? 2</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">intArray3: {2,4,8,16}</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">intArray3 reversed: {16,8,4,2}</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">integerArray1: {2,4,8,16}</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="background: white none repeat scroll 0% 50%; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: navy; font-family: 'Courier New';" lang="EN-US">get 'C' from map: 60.0</span><span style="font-size: 9pt; color: navy; font-family: 'Courier New';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-family: 宋体;">这段代码说明了我们可以如何方便的利用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">ArrayUtils</span><span style="font-family: 宋体;">类帮我们完成数组的打印、查找、克隆、倒序、以及值型</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">/</span><span style="font-family: 宋体;">对象数组之间的转换等操作。如果想了解更多，请参考</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Javadoc</span><span style="font-family: 宋体;">。</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:38 <a href="http://www.blogjava.net/coolingverse/articles/148131.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] 开篇</title><link>http://www.blogjava.net/coolingverse/articles/148128.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:37:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148128.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148128.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148128.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148128.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148128.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">的世界，有很多（成千上万）开源的框架，有成功的，也有不那么成功的，有声名显赫的，也有默默无闻的。在我看来，成功而默默无闻的那些框架值得我们格外的尊敬和关注，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Jakarta Commons</span><span style="font-family: 宋体;">就是这样的一个框架。如果你至少参与了一个中型规模的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">项目，那么我想有超过一大半的机会你都接触和使用到了</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Jakarta Commons</span><span style="font-family: 宋体;">，不管你自己有没有察觉。就我所知，除了</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Apache Jakarta</span><span style="font-family: 宋体;">其他许多开源框架之外，不少所谓的商业框架其实内部有些模块是借用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons</span><span style="font-family: 宋体;">的，甚至有一些完全就是对</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons</span><span style="font-family: 宋体;">的类进行了简单的封装。如果真的没有接触过也不要紧，当你看到它时，你自然会被它的简单而强大所吸引。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">要提高</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">编程水平，一条可以走的路就是学习优秀的开源框架。这又要分两个层面：应用层面和源码层面。从应用来说，开源的框架大都可以给你带来生产力和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">/</span><span style="font-family: 宋体;">或代码质量的大幅提升；从源码来说，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">开源框架，尤其是那些大型的优秀的框架，其源码对广大</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">爱好者来说都是一笔巨大的财富，你可以从中学到许多课本上学不到的东西：编码习惯、代码组织、注释、文档、如何用</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">解决实际问题、特定问题的算法，等等。而这些对于我们的作为软件开发者的实际工作而言，相当有意义。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">熟悉</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Jakarta Commons</span><span style="font-family: 宋体;">的朋友可能会觉得现在是不是有点过时，因为有很多功能在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">J2SE 5.0</span><span style="font-family: 宋体;">中已经包含了。其实这个问题看你怎么去看，一方面，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">J2SE 5.0</span><span style="font-family: 宋体;">毕竟是刚出现不久的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">版本，实际应用中，很多时候我们需要把代码兼容等级维持在</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">1.3</span><span style="font-family: 宋体;">或者</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">1.4</span><span style="font-family: 宋体;">，所以很多</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">5.0</span><span style="font-family: 宋体;">的功能我们暂时还不能放开手脚去使用；另一方面，鉴于</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Jakarta</span><span style="font-family: 宋体;">在一定程度上反映了一线</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">开发人员的实际需求，而目前</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">5.0</span><span style="font-family: 宋体;">已经采纳了其中许多特性，我们当然也有理由相信未来的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">版本还会继续参照</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Jakarta Commons</span><span style="font-family: 宋体;">的内容。有这么一套开发源码、免费使用、商业友好的优秀</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">作为</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">自带</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">的补充，何乐而不为呢？</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">我打算在近期陆续做一些</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Jakarta Commons</span><span style="font-family: 宋体;">的学习笔记放上来，供大家参考。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">有关</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Jakarta</span><span style="font-family: 宋体;">的最新动态和详细信息，可以参考：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<span style="font-family: 'Trebuchet MS';" lang="EN-US"><a href="http://jakarta.apache.org/commons/index.html">http://jakarta.apache.org/commons/index.html</a></span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:37 <a href="http://www.blogjava.net/coolingverse/articles/148128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Jakarta Commons笔记] Commons Lang</title><link>http://www.blogjava.net/coolingverse/articles/148129.html</link><dc:creator>Stanley Sun</dc:creator><author>Stanley Sun</author><pubDate>Tue, 25 Sep 2007 14:37:00 GMT</pubDate><guid>http://www.blogjava.net/coolingverse/articles/148129.html</guid><wfw:comment>http://www.blogjava.net/coolingverse/comments/148129.html</wfw:comment><comments>http://www.blogjava.net/coolingverse/articles/148129.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coolingverse/comments/commentRss/148129.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coolingverse/services/trackbacks/148129.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">跟</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">java.lang</span><span style="font-family: 宋体;">这个包的作用类似，</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons Lang</span><span style="font-family: 宋体;">这一组</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">也是提供一些基础的、通用的操作和处理，如自动生成</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">toString()</span><span style="font-family: 宋体;">的结果、自动实现</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">hashCode()</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">equals()</span><span style="font-family: 宋体;">方法、数组操作、枚举、日期和时间的处理等等。目前这组</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">的版本是</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">2.1</span><span style="font-family: 宋体;">，下载地址如下：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><a href="http://apache.justdn.org/jakarta/commons/lang/binaries/commons-lang-2.1.zip">http://apache.justdn.org/jakarta/commons/lang/binaries/commons-lang-2.1.zip</a><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><a href="http://apache.justdn.org/jakarta/commons/lang/source/commons-lang-2.1-src.zip">http://apache.justdn.org/jakarta/commons/lang/source/commons-lang-2.1-src.zip</a><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">其中后一个是源代码。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">这一组</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">的所有包名都以</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.lang</span><span style="font-family: 宋体;">开头，共有如下</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">8</span><span style="font-family: 宋体;">个包：</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.lang<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.lang.builder<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.lang.enum<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.lang.enums<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.lang.exception<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.lang.math<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.lang.mutable<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: navy; font-family: 'Trebuchet MS';" lang="EN-US">org.apache.commons.lang.time<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">其中的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">lang.enum</span><span style="font-family: 宋体;">已不建议使用，替代它的是紧随其后的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">lang.enums</span><span style="font-family: 宋体;">包。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"> lang</span><span style="font-family: 宋体;">包主要是一些可以高度重用的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Util</span><span style="font-family: 宋体;">类；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">lang.builder</span><span style="font-family: 宋体;">包包含了一组用于产生每个</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">类中都常使用到的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">toString()</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">hashCode()</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">equals()</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">compareTo()</span><span style="font-family: 宋体;">等等方法的构造器；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">lang.enums</span><span style="font-family: 宋体;">包顾名思义用于处理枚举；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">lang.exception</span><span style="font-family: 宋体;">包用于处理</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Java</span><span style="font-family: 宋体;">标准</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">API</span><span style="font-family: 宋体;">中的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">exception</span><span style="font-family: 宋体;">，为</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">1.4</span><span style="font-family: 宋体;">之前版本提供</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Nested Exception</span><span style="font-family: 宋体;">功能；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">lang.math</span><span style="font-family: 宋体;">包用于处理数字；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">lang.mutable</span><span style="font-family: 宋体;">用于包装值型变量；</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">lang.time</span><span style="font-family: 宋体;">包提供处理日期和时间的功能。</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-family: 宋体;">由于</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Commons</span><span style="font-family: 宋体;">的包和类实在很多，不可能一个一个讲了，在接下来的专题文章中我就只分别过一下</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">lang</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">lang.builder</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">lang.math</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">lang.time</span><span style="font-family: 宋体;">这几个包和常见的用法，其他的我们可以在用到时临时参考一下</span><span style="font-family: 'Trebuchet MS';" lang="EN-US">Javadoc</span><span style="font-family: 宋体;">。位置就在安装路径的</span><span style="font-family: 'Trebuchet MS';" lang="EN-US"><o:p></o:p></span></p>
<span style="font-family: 'Trebuchet MS';" lang="EN-US">&#8230;\commons-lang-2.1\docs\api\index.html</span>
  <img src ="http://www.blogjava.net/coolingverse/aggbug/148129.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coolingverse/" target="_blank">Stanley Sun</a> 2007-09-25 22:37 <a href="http://www.blogjava.net/coolingverse/articles/148129.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>