Java沒有C風(fēng)格的枚舉量,為此,lang包提供了一個(gè)類型安全的Enum類型,填補(bǔ)了空白。Enum類是抽象的,如果你要?jiǎng)?chuàng)建枚舉量,就要擴(kuò)展Enum類。下面的例子清楚地說明了Enum的用法。
以后我們就可以按照下面的方式使用枚舉變量:OnTV.getEnum("Idol")。該調(diào)用從前面創(chuàng)建的枚舉數(shù)據(jù)類型返回Idol。這個(gè)例子比較簡單,實(shí)際上Enum類還提供了許多有用的方法,請(qǐng)參見本文后面提供的完整實(shí)例。
2.4 Collections
■ 概況:擴(kuò)展了Java Collection框架,增添了新的數(shù)據(jù)結(jié)構(gòu)、迭代機(jī)制和比較操作符。
■ 官方資源:主頁,二進(jìn)制,源代碼。
■ 何時(shí)適用:幾乎所有需要操作數(shù)據(jù)結(jié)構(gòu)的重要Java開發(fā)項(xiàng)目都可以使用Collections API。和Java的標(biāo)準(zhǔn)實(shí)現(xiàn)相比,Collections API有著諸多優(yōu)勢。
■ 示例應(yīng)用:CollectionsDemo.java。要求CLASSPATH中包含commons-collections.jar。
■ 說明:
要在有限的文章篇幅之內(nèi)詳盡地介紹 Collections API實(shí)在是太困難了,不過這里仍將涵蓋大多數(shù)最重要的類,希望能夠引起你的興趣,認(rèn)真了解一下其余的類。Collections本身的文檔也提供了許多資料并解釋了每一個(gè)類的用法。
Bag接口擴(kuò)展標(biāo)準(zhǔn)的Java Collection,允許生成計(jì)數(shù)器來跟蹤Bag里面的所有元素。當(dāng)你想要跟蹤進(jìn)出某個(gè)集合的元素的總數(shù)時(shí),Bag是非常有用的。由于Bag本身是一個(gè)接口,所以實(shí)際使用的應(yīng)該是實(shí)現(xiàn)了該接口的類,例如HashBag或TreeBag--從這些類的名字也可以看出,HashBag實(shí)現(xiàn)的是一個(gè)HashMap的Bag,而TreeBag實(shí)現(xiàn)的是TreeMap的Bag。Bag接口中兩個(gè)最重要的方法是:getCount(Object o),用來返回Bag里面特定對(duì)象的出現(xiàn)次數(shù);uniqueSet(),返回所有唯一元素。
Buffer接口允許按照預(yù)定義的次序刪除集合中的對(duì)象,刪除次序可以是LIFO(Last In First Out,后進(jìn)先出),或FIFO(First In First Out,先進(jìn)先出),另外還可以是自定義的次序。下面來看看如何實(shí)現(xiàn)一個(gè)Buffer,按照自然次序刪除元素。
BinaryHeap類實(shí)現(xiàn)了Buffer接口,能夠按照自然次序刪除元素。如果要顛倒次序,則必須傳入一個(gè)false,告訴Heap采用自然次序的逆序。
?
FastArrayList、FastHashMap和FastTreeMap類能夠按照兩種模式操作,超越了與它們對(duì)應(yīng)的標(biāo)準(zhǔn)Collection。第一種模式是"慢模式",類的修改操作(添加、刪除元素)是同步的。與此相對(duì),另一種模式是"快模式",對(duì)這些類的訪問假定為只讀操作,因此不需要同步,速度較快。在快模式中,結(jié)構(gòu)性的改動(dòng)通過下列方式完成:首先克隆現(xiàn)有的類,修改克隆得到的類,最后用克隆得到的類替換原有的類。FastArrayList、FastHashMap和FastTreeMap類特別適合于那種初始化之后大部分操作都是只讀操作的多線程環(huán)境。
iterators包為各種集合和對(duì)象提供標(biāo)準(zhǔn)Java Collection包沒有提供的迭代器。本文的示例應(yīng)用示范了ArrayIterator,通過迭代方式訪問Array的內(nèi)容。iterators包里面各種迭代器的用法基本上與標(biāo)準(zhǔn)Java迭代器一樣。
最后,comparators包提供了一些實(shí)用的比較符。所謂比較符其實(shí)也是一個(gè)類,它定義的是如何比較兩個(gè)屬于同一類的對(duì)象,決定它們的排序次序。例如,在前面提到的Buffer類中,我們可以定義自己的比較符,用自定義的比較符來決定元素的排序次序,而不是采用元素的自然排序次序。下面來看看具體的實(shí)現(xiàn)經(jīng)過。
三、Web類
Web類的組件用來執(zhí)行與Web相關(guān)的任務(wù)。
3.1 FileUpload
■ 概況:一個(gè)可以直接使用的文件上載組件。
■ 官方資源:主頁。由于這個(gè)組件尚未正式發(fā)布,今年二月發(fā)布的Beta版又有許多BUG,所以建議從nightly builds下載最新的版本。
■ 何時(shí)適用:當(dāng)你想要在Java服務(wù)器環(huán)境中加入一個(gè)易用、高性能的文件上載組件之時(shí)。
■ 示例應(yīng)用:fileuploaddemo.jsp,fileuploaddemo.htm,和msg.jsp。要求服務(wù)器端應(yīng)用目錄的WEB-INF/lib下面有commons-fileupload-1.0-dev.jar。
FileUpload組件解決了常見的文件上載問題。它提供了一個(gè)易用的接口來管理上載到服務(wù)器的文件,可用于JSP和Servlet之中。FileUpload組件遵從RFC1867,它分析輸入請(qǐng)求,向應(yīng)用程序提供一系列上載到服務(wù)器的文件。上載的文件可以保留在內(nèi)存中,也可以放入一個(gè)臨時(shí)位置(允許配置一個(gè)表示文件大小的參數(shù),如果上載的文件超過了該參數(shù)指定的大小,則把文件寫入一個(gè)臨時(shí)位置)。另外還有一些參數(shù)可供配置,包括可接受的最大文件、臨時(shí)文件的位置等。
下面介紹一下使用FileUpload組件的步驟。
首先創(chuàng)建一個(gè)HTML頁面。注意,凡是要上載文件的表單都必須設(shè)置enctype屬性,且屬性的值必須是multipart/form-data,同時(shí)請(qǐng)求方法必須是POST。下面的表單除了上載兩個(gè)文件,另外還有一個(gè)普通的文本輸入框:
還有其他一些略有變化的使用形式,正如前面所指出的,我們可以在上載的文件上打開一個(gè)輸入流,或者讓它們駐留在內(nèi)存中直至空間占用達(dá)到一定的限制值,或者在判斷文件類型的基礎(chǔ)上,以String或Byte數(shù)組的形式獲取其內(nèi)容,或者直接刪除文件。這一切都只要使用FileItem類提供的方法就可以方便地做到(DefaultFileItem是FileItem的一個(gè)實(shí)現(xiàn))。
posted on 2006-10-27 19:38 young 閱讀(171) 評(píng)論(0) 編輯 收藏 所屬分類: java