跳到主要內容

StringBuffer & "The Type AbstractStringBuilder is not visible"

在jdk1.5下使用StringBuffer,如果在同一行連續使用append
StringBuffer sb = new StringBuffer();
sb.append("test").append("test2");


有些IDE會出現以下compilation error訊息:
The Type AbstractStringBuilder is not visible.
但如果分開寫就沒有這個error:
<big><br />sb.append("test");<br />sb.append("test2");<br /></big>

原因有兩個
其一是,Java2SE5.0 開始有covariant return types這個新feature,意思大約是「可變回傳型態」,主要是讓子類別在覆寫(override)父類別的某個method時,回傳型態可以是父類別回傳型態的子類別。例如

<br />Parent class{<br /> Parent getObj(...){...}<br />}<br /><br />Child class extends Parent{<br /> Child getObj(...){<br />     ...<br />     return Child;<br /> }<br />


其 二是1.5之後新增了AbstractStringBuilder為StringBuffer, StringBuilder的父類別,但他卻是private類別,甚至從javadoc上也看不到此類別,你只會看到StringBuffer, StringBuilder都繼承自Object。

所以,第一種寫法,StringBuffer append()可能被IDE compiler判定回傳AbstractStringBuilder然後又呼叫其append(),導致發生找不到 AbstractStringBuilder情形,這應該是IDE可以解決的問題,我聽說eclipse好像已經解決,但是若是你用的IDE沒有解決,那 目前看到的解決方法只有改裝1.4 JDK。

Because JavaSE5.0 has supported "covariant return types" and add a new private class "AbstractStringBuilder" as a super class of StringBuilder and StringBuffer. The fist calling append() of StringBuffer object might be treated as returning AbstractStringBuilder by IDE's compiler, so the second calling append() of AbstractStringBuilder cause the compiler error.


留言

這個網誌中的熱門文章

Code Complete, 2ed (中譯:軟體建構之道) 讀後心得

Code Complete, 2ed (中譯:軟體建構之道) 讀後心得 雖然以前在學校有修過軟體工程,但是說實在現在我對建構軟體的整個概念都來自於兩本書:「人月神話」(The Mythical Man-Month)、Code Complete[1]。我畢業後第一份工作是軟體研發工程師,我們公司所開發的系統大約有近百位工程師共同維護,當然各有依功能與專業知識將系統劃分不同的區 塊來維護,在面對大型的系統與這麼多人寫程式是以前在學校沒有遇過的,因此也開始思考怎樣才是好的軟體開發方式。從大學好友那探聽到了Code Complete這本書,花了上千元買了英文版,(現在中文版已出,簡體版聽說只要三分之一的價錢)認真讀了幾篇之後,真是如獲至寶,於是自己讀過後,還跟同事組成讀書會一同研討這本書。 作者 Steve McConnell (個人Blog http://www.stevemcconnell.com/ )著作不算量大,但是我看過的幾本質量都很好,印象中他曾經在微軟工作過,後來成立一家軟體顧問公司 Construx Software 。 這本書(書本網站 http://cc2e.com/Default.aspx )的討論主題很廣泛,但是並不空泛,從最小的、最基本的如何寫出好的程式, 例如函式(routine)、註解 (comment)、變數的命名等,也談整個軟體建構的過程除錯、測試,最後也談到軟體工程師個人能力與技術生涯的發展,算是各方面都有提及。但是我比較 建議有半年以上的實際程式經驗來讀這本書比較適合,我自認為如果我在學生時代接觸本書,可能沒有什麼太大的感觸,因為面對的都是小格局、人數少的小系統, 書中所探討的原則與例子,很多時候沒有團隊開發或大型系統的經驗,很難體會。但稍有經驗的人,看完之後保證在程式撰寫與軟體開發方面的觀念會有很大的提 昇。 Table of Content Laying the Foundation 1 Welcome to Software Construction 2 Metaphors for a Richer Understanding of Software Development 3 Measure Twice, Cut Once: Upstream Prerequisites 4 Key...

innerHTML 的安全風險

問題 若你要實作一個使用者輸入的功能,並把輸入的內容顯示在網頁上時,應避免把使用者輸入的值直接指定給某個 element 的 innerHTML 。因為若是使用者輸入包含 HTML、JavaScript, innerHTML 就會解析並執行: var userInput = '<img src="javascript:alert("XSS")">' element . innerHTML = userInput ; 因此可能 user A 的惡意輸入,會被系統顯示到 user B 的畫面上,進而執行特定成程式碼而造成 XSS 攻擊 。 解法 一般會先想到 encode HTML,但是如果只是要顯示文字,將使用者輸入值指定給 textContent 會更簡單,無需 encode,該值會被當成純文字處理,並不會執行 javascript。 var userInput = '<img src="javascript:alert("XSS")">' element . textContent = userInput ;

ZK - open source Ajax Framework介紹

ZK介紹 數年前因 IThome的報導 就有注意到ZK,以framework作為產品的台灣公司,真的是非常少見,而ZK的表現也是令人激賞。 除了ZK 這個主軸的framework以外,其相關的產品也很全面,介紹部份如下: ZK studio 一個eclipse plugin,用來加速ZK開發的工具。內含一些簡化開發過程的工具如: ZUL Visual Editor, 可以預覽zul所設計的UI在瀏覽器上顯示的樣子,方便設計UI。 Properties, 點選某個zul中的UI元件,即會顯示該元件的所有可設定的properties。 ZUL Palette, 元件調色盤,可以將UI元件用拖拉的方式放至zul文件中。 ZK JSP tag 將zk的元件整合至jsp中,若不想完全改寫既有jsp頁面,可以採用此一選擇,可以立即獲得Ajax的特性。 ZK Spreadsheet 類似Google docs中試算表的元件 ZK calendar 類似Google calendar的元件 ZK線上展示 ,直接以畫面示範所有元件的用法與外觀,你可以手動修改原始碼並立即觀看修改後的結果,很棒的一個作法。 優點 快速擁有Ajax效果 對JavaEE工程師來說,在不換平台的情況下(Flex, Silverlight)要做出RIA,擁有的選擇不多,直接透過Javascript使用AJAX或採用Ajax相關的library(Jquery,DWR)需要一段時間學習, RichFaces 也可能是個選擇,但JSF似乎不是很多人採用,對於JavaEE工程師來說,可以透過學習成本不高的ZK來快速打造RIA。 支援MVC架構 zul配合ZK composer(Controller),可以使zul頁面純粹擔任View的角色,完全不需寫程式碼在頁面上,作到清楚的MVC切分。 composer更可對頁面UI進行動態新增、刪減或修改屬性之變化,皆透過zK ajax engine來完成。 可純粹以Java開發 雖然ZK 5已讓懂javascript的人作前後端整合開發,甚至支援其他的script語言,但是幾乎所有既有元件功能都仍然可以透過Java控制。 Component-based, Event-Driven UI畫面以UI元件為基礎配置,也可以某個程度的客製化元件...