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