2007年5月18日
我的工程名是PersonalPlatform,每次啟動Tomcat在IE輸入地址后,workspace都會生成一個PersonalPlaform(注意:比真正的工程名少一個“t”),里面有個work/tldCache.ser文件。我肯定是某個地方的工程名寫錯了,但是查了好久都沒有查出來,請問一下出現這種情況一般是什么地方出錯了?
2007年5月10日
記錄一下這個重要時刻!
今天書上看到的代碼我自己總算配置成功了!??!
想哭,熬了兩個晚上,看代碼看到凌晨四點,早上八點又接著做,狀態非常差,都要崩潰了。現在朋友封了我個名號:拼命三娘!
剛開始的時候Eclipse老是出現404錯誤,找不到指定文件,這個問題都煩了我1個月了。今早無意中打開Tomacat的server.xml文件,發現<Context>里面全是亂碼,終于恍然大悟,我的文件夾用中文命名,當然找不到路徑啦,改完路徑之后運行Tomcat,還是出現org.apache.jasper.JasperException: File "/WEB-INF/struts-bean.tld" not found的錯誤
看了半天Struts的配置文件和web.xml文件以及Struts-bean.tld文件,完全沒有錯誤,再打開tomcat的conf文件,還是那個server.xml文件的<Context>里面雖然不是亂碼了,但是路徑還是錯的,于是改成自己的PersonalPlatform的路徑改為<Context path="/PersonalPlatform" reloadable="true" docBase="F:\biyesheji\workspace\PersonalPlatform" workDir="F:\biyesheji\workspace\PersonalPlatform\work" />
沒抱多大希望,居然....居然.....居然給打開了!!?。。?!
雖然頁面的文字還是亂碼,但是這個我有思路。抱著小萍差點要哭起來!
要謝謝這位同學:http://blog.csdn.net/jrq/archive/2004/10/29/157762.aspx
他打了個比喻很有趣。他說學STRUTS就像是跟struts在戀愛一樣,這位戀人很很難很難接近,性格很難琢磨,對他要有百分百的耐心。
“請再檢查一遍。
然后請再檢查一遍。
不要煩躁,一定要像對待初戀情人一樣對待它,不然會死的很難堪!
一定要好好檢查。
這個MVC中的C很要命的,流程控制全靠它了,一定要小心呵護的。
我在網上看到有人對這個問題說“試了千百回,改了千百次,就是不知道什么原因”。
如果你也恰好和struts是初戀,也恰好試了千百回,改了千百次,
那么,請不要灰心”
那么,我現在跟struts算不算是認識了呢?真希望可以多加了解!
下來的時間用一天半再讀熟代碼,然后就開始自己動手改了!
有信心了!加油~
2007年5月9日
org.apache.jasper.JasperException: File "/WEB-INF/struts-bean.tld" not found
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:50)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:411)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:118)
org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:159)
org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:418)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:483)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1539)
org.apache.jasper.compiler.Parser.parse(Parser.java:126)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:220)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:101)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:203)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:470)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
2007年5月8日
轉載自:http://m.tkk7.com/realsmy/archive/2007/05/07/115694.html
今天,看了幾個N站長的BLOG,看了之后真的好羨慕。真希望自己以后也和他們一樣。他們會的技術我都想去學習。但是,沉思了一陣子之后,我想通了。我有自己要學習的技術,我有自己要發展的路線。不能見一個N人就效仿一個。那樣,我可能最終會一事無成。
學習之前,首先明確自己是做什么的,我不是專門做網站的,不是專門做產品的,我是做軟件外包的。我要首先明確自己現在所在的位置,然后,去摸索,去思考,弄清楚在這個行業中,我該掌握哪些技能才能立足。
下面,是我首先要了解的事。
網上搜到的資料:http://www.mylinux.com.cn/HTML/1172743480434.html
所謂軟件外包就是一些發達國家的軟件公司將他們的一些非核心的軟件項目通過外包的形式交給人力資源成本相對較低的國家的公司開發,以達到降低軟件開發成本的目的。眾所周知,軟件開發的成本中70%是人力資源成本,所以,降低人力資源成本將有效地降低軟件開發的成本。
軟件外包已經成為發達國家的軟件公司降低成本的一種重要的手段。目前,全球軟件的銷售額為6,000億美元,而其中軟件外包的銷售額即達到500~600億美元。預期到2005年軟件外包的銷售額將達到1,000億美元。軟件外包的大幅度增長為人力資源成本相對較低的印度和中國帶來了新的發展機會。
中國目前已經有不少的公司開始介入軟件外包這一領域。目前軟件外包產業較為發達的地區有上海、北京、大連以及深圳等城市。以北京為例,有40%的軟件企業參與外包項目,軟件行業60%~70%的營業額來自外包。在上海和北京,一個軟件外包工程師的月薪達到7,000~10,000元人民幣,而同樣能力的軟件工程師在武漢只需要三~四千元人民幣。資本的特征是向成本更低的地方流動,所以,近一段時間以來已經有大量的東部軟件公司準備遷移到中部地區,目前首選的地區主要是武漢和西安。
軟件外包將為中國軟件業帶來什么呢?不僅僅是經濟發展的機會,還有先進的軟件開發管理流程,以及嚴格的軟件質量控制體系。通過發展軟件外包產業,我國的軟件產業將逐漸地告別手工作坊式的開發時代,進入工程化、規模化的開發領域。
為抓住這一歷史性的機遇, 我國政府正全力為這些軟件外包公司營造更好的投資環境,政府已經在多個重點城市建立開發區,設立多個全新的軟件開發園區,并對于入園的軟件企業給予相當優惠的政策條件。但是,僅有政策條件和環境條件是不夠的,對軟件企業影響最大的是人力資源成本,能否提供多數量多的、成本較低并在質量方面滿足需要的軟件外包工程師是我國能否抓住這一歷史機遇的重要條件。
中國軟件外包市場現狀
全球軟件外包市場規模已達1000億美元。發包市場主要集中在北美、西歐和日本,接包市場主要是印度、愛爾蘭等國家。其中,美國市場被印度壟斷,歐洲市場則被愛爾蘭壟斷。現在,菲律賓、巴西、俄羅斯、澳大利亞等國也加入了世界軟件外包的競爭行列。
IT外包服務是社會分工不斷細化和IT技術發展相結合的產物。與硬件外包相比,軟件外包起步較晚,但發展很快。目前印度是軟件外包最大市場。除此之外,愛爾蘭,以色列和中國也是軟件外包的主要市場。
IDG統計數據表明,全球軟件外包市場規模已達到1000億美元。全球軟件外包的發包市場主要集中在北美、西歐和日本等國家,其中美國占40%,日本占10%。外包接包市場主要是印度、愛爾蘭等國家。其中,美國市場被印度壟斷,印度軟件業80%的收入依賴軟件外包業務,印度已經成為軟件外包的第一大國。而歐洲市場則被愛爾蘭壟斷。現在,菲律賓、巴西、俄羅斯、澳大利亞等國家也加入了世界軟件外包的競爭行列。
雖然中國IT外包服務市場一直高速增長,但截至目前,IT外包服務的用戶群還相當狹小。就IT外包服務的內容和服務方式而言,還主要局限于基礎架構層面的網絡基礎設施和桌面設備的支持與維護。2003年IT外包服務的市場規模只有人民幣42.6億元。其中IT運營管理外包服務的規模為21.6億,應用管理外包服務為1.5億,軟件外包19.5億。
計世資訊的《2003~2004年中國IT服務市場研究年度報告》顯示, 2003年中國IT外包市場規模達35.2億人民幣,同比增長42.5%。中國軟件外包的主要目標市場是日本和美國。
趨勢與預測
BPO成為未來外包發展的趨勢。
合作關系及無縫集成模式將成為外包的主要方式
外包市場集中度較高
外包市場成熟,形成了規范的外包市場
IT外包在行業中的應用深入
國內的外包服務市場的發展趨勢為:
由市場不成熟高度分散走向市場逐漸成熟集中
國內外包市場保持快速增長。
中國將成為繼印度后新的外包產業中心
IT外包服務結構轉化,服務向高端發展
軟件外包大型企業出現
我國軟件外包業趕上印度還缺什么?
中國經濟巨大的成功使人們不禁推測:中國的軟件外包業很快將和印度不相上下。但是麥肯錫公司最近對中國軟件部門進行研究后發現,中國要想在軟件外包業對印度形成威脅還需要很多年的時間。首先,中國必須鞏固其高度分散的軟件行業,培育獲得大型國際項目所必需的規模和技術。
目前,中國向這個方向所做出的努力還并不多。
差距
有一點可以肯定,中國的IT業正在健康的擴張。近幾年,中國IT行業專門人才的數量增長很快。從1997年起,軟件和IT行業的年收入平均每年增長42%,2003年達到68億美元。尤其是,這個行業中,2000年到現在,說英語的畢業生(在軟件外包業中很重要)翻了一番,已經超過2400萬。但是,中國IT業自身的很多不足,致使這些變化不能被徹底的利用。盡管中國IT行業的收入在增加,但是卻只有印度的一半(印度IT行業每年的收入是127億美元)。中國IT行業的增長受國內需要的驅使,其多數客戶都是中小型的中國企業,他們需要的是根據他們的需要專門為他們定制的軟件。中國初生的軟件外包業務只點到IT行業總收入的10%,而印度的這個數字則高達70%。盡管成本相對較低,但是中國軟件服務公司的營業毛利只有7%,而世界同類公司的營業毛利的平均水平可以達到11%,原因是他們接手的項目往往規模不大,但報價又相對較低。
規模
要想在全球的外包業中形成有力的競爭,中國必須鞏固其軟件業。中國排名前十的IT服務公司所占的市場份額僅為20%,而印度的十大IT公司占有的市場份額高達45%。中國大約有8000家軟件服務供應商,其中員工少于50人的占四分之三,只有5家擁有2000名以上的員工。印度的軟件服務供應商不到3000家,至少有15家擁有2000名以上的員工,其中的塔塔諮詢服務公司(TCS)、威普羅公司(Wipro)、信息系統技術有限公司(Infosys)都已經獲得國際上的認可,在全球擁有客戶。沒有適當的規模,中國企業不可能吸引到頂尖的國際客戶。因為人們通常認為,小公司是風險相對較大,可靠度相對不高的合作伙伴。麥肯錫的研究發現,只有12%的中國軟件服務公司認為合并、收購和結盟是應優先考慮的事務。中國軟件服務公司的經理人中,有兼并收購經驗的不多,盡管他們的文化有
利于組織的發展,但是依靠這種文化來對抗新的競爭對手顯然不是很理想。相反,印度的幾家公司正在考慮并購中國公司來擴大他們的業務。
質量
行業的分散狀態使中國軟件行業的另外一些問題顯得比較突出,如過程控制和產品管理不夠嚴格。中國30家大型軟件公司當中只有6家達到CMM五級或四級,而印度的30家大型軟件公司全部達到這一專業水準。調查發現,四分之一的中國公司在嘗試執行CMM質量標準,但是有一半多的公司在調查中表示,做這各努力沒有必要,不可行,或者認為不值得。
人才
中國的軟件服務提供商還應加強人才的管理。絕大多數中國公司都不重視幫助員工成長,他們當中很少懂得將股權、培訓項目或其它激勵機制引入對人才的管理。麥肯錫的調查發現,中國軟件公司中人員的更新率每年高達20%,而美國雖然擁有流動性很強的IT勞務市場,但它的這個數字只有14%。
其它
有了更大的規模和更好的人才基礎,中國的軟件服務公司就會具備解決其它問題的條件,比如在國際市場建立可信的品牌,開發特定行業,如金融和制約行業的技術。另外,還要注意保護客戶的知識產權,要克服基于項目的短期效應心理,要致力于為客戶提供長期服務。
我不歧視自己這個行業,雖然這個行業看起來就是為外國人打雜的行業,相反的,我喜歡這個行業。
要想超越別人,首要就要敢于承認自己比別人差,并且能夠虛心的向他們學習。外包,大多是一個個的軟件項目。這就需要一個管理有序,技術夠硬的團隊。那么很明顯,這樣的團隊需要什么樣的人,就是我可以選擇的發展路線。
而且,也不乏看出,中國IT教育這個方向目前也隱藏著很大的“發展錢力”,我的思想沒那么偉大,不想推動哪個行業的發展,我所指的,都是個人利益。所以有機會的話,我可能會選擇當一名講師。
2007年5月6日
這些詞老師經常說,但我都不知道具體的意思?,F在整理如下。
1.什么是JSP?
JSP是目前流行的動態網頁開發技術之一。在傳統網頁HTML文件中加入JSP標記和Java程序段,就構成了JSP網頁。JSP(Java Server Page)技術是由Sun公司提出、多個IT公司參與合作建立的一種動態網頁開發技術標準。JSP規范是Web服務器、中間件應用服務器、交易系統以及軟件開發工具廠商間廣泛合作的成果,該技術為創建顯示動態生成內容的Web頁面提供了一個簡潔而快速的方法。JSP的設計目的是使的構造基于Web架構的應用系統更加容易、方便和快捷,而這些應用程序可以和各種Web服務器、中間件應用服務器、瀏覽器和各種開發工具協同工作。
2.什么是Servlet?
Servlet是位于Web服務器內部的服務端的java類。JSP規范建立在JavaServlet規范上,同一個應用程序里可以同時包含JSP頁面和Servlet。Servlet是對支持Java的服務器的一般擴充,因而是JSP的重要技術基礎。其最常見的用途是擴展Web服務器,提供安全、可移植、易于使用的CGI替代品。Servlet可以被看作一種動態加載的模塊,并為服務器接受的請求提供服務,完全運行在Java虛擬機上。由于Servlet在服務器端運行,所以不依賴于瀏覽器。此外,從理論上講,只要是Java能實現的功能,Servlet也可以實現。
Servlet還可以堪稱服務器的Applet,能被Web服務器加載和執行,并能接收客戶端發來的請求(通過Web服務器)執行需要的操作,然后返回結果給服務器。
3.什么是JavaBean?
Bean的中文含義是“豆子”,顧名思義,JavaBean是指一段特殊的Java類。簡單的說,JavaBean是用Java語言描述的軟件組件模型,其實際上是一個類。這些類遵循了一個接口格式,以便于使函數命名、底層行為以及繼承或實現的行為,可以把類看作標準的JavaBean組件進行構造和應用。
JavaBean一般分為可視化組件和非可視化組件兩種。可視化組件可以是簡單的GUI元素,如按鈕或者文本框,也可以是復雜的,入報表組件;非可視化組件沒有GUI表現形式,用于封裝業務邏輯、數據庫操作等。其最大的優點在于可以實現代碼的可重用性。對于有過其他語言編程經驗的人而言,JavaBean可以看作類似于ActiveX的編程組件。但區別在于JavaBean是跨平臺的,ActiveX組件則僅局限于Windows系統。
JavaBean組件與EJB(Enterprise JavaBean ,企業級JavaBean)組件完全不同。EJB是J2EE的核心,是一個用來創建分布式應用、服務器端以及基于Java應用的功能強大的組件模型。JavaBean組件主要用于存儲狀態信息,而EJB組件可以存儲業務邏輯。
未完待續....
2007年5月4日
今天再說二句,發表一下鄙見,關于壓力和動力。
在一個項目中,甚至做任何事情,在沒有壓力的情況下所做的東西,一般進步不是太大,或是做的所是以前有的,或是還不如以前的,并且所用的時間可以說是實際時間的二三倍,包括項目的管理者在內,都要給自己點壓力。不然壓力會在“說而不做”中過去,可是壓力卻又有量度的,分配給每一個人的任務,他都會說“我做的活太多了,量太大了,這本來是二個人的活,我現在一個人加班也加個差不多了”,這時候你怎么好意思再給他壓力呢,然后,客戶又說“這點功能還不多實際嗎,給你這些錢都不少了。”所以作為項目的領導者不要全部聽取其它人的話,為什么你的工資比別人高那么多呢?就是因為你有經驗,你做過這東西,做這樣的東西對每個人來說用多長時間,做成怎么樣,你心里有個數,可是也不能不聽弟子的話,畢竟每個項目都有它具體的方面。
再者,不管公司再小,項目組再小,也得有成套成型的規矩,也時不時把公司的稍層一點的東西給弟子講一講,比如說公司馬上拿到什么什么項目了等等,讓弟子們感覺到這個公司是可持續發展的,是有前途掙大錢的,不然,都會感覺到反正就這樣了,混一天是一天,反正馬上就要完蛋?;蚴堑茏右运囊庖妬矶晒旧蠈拥囊庖?,肯定會有偏見,這樣都不能給他們以動力,也不利于公司的發展。我們要有一個很好的激勵機制來激勵弟子們自愿的給你干活,自愿加班。
話說項目管理,我本人系剛剛畢業的大學生,說起來在這空談項目管理簡直不是瞎胡鬧嗎,嗨,可別這樣說,小心你缺少的就是我所說的。
以為我的理解,溝通分為二種,一種是向下的溝通,也就是與自己的小弟溝通了,一種是向上的溝通,那就是與大經理以及客戶溝通了,客戶是上帝,理所當然也是向上的溝通了,溝通是以與項目相關的所有人的素質和能力為基礎,是以項目經理為核心,在各個小弟不斷理解的情況下建立起來是一種能使項目流暢進行的籠統說法,在項目中項目管理者經常與上與下溝通,能及時發現問題,解決問題,能很好的與上與下溝通,能發現更多的問題,而更好的解決問題,從而使項目更加成功,不管是書面溝通還是口頭溝通,無非都是想讓對方彼此了解自己的意思,而不論多有才華,管理能力有多強,我們都是具體問題具體分析,都是在當時這個環境下,當時這個時間,我們溝通的效果,還有點,一個問題能二去溝通好的,就不要插第三者,比如說,客戶的詳細需求能讓做程序的程序知道的,就不要再找一個人,讓他先了解需求,然后再告訴程序員,這樣很容易造成信息的失真,確確實實是這樣,如果就是這個程序員,請你也不要往上說出,盡你最大的努力把項目做好就行了,因為什么?呵呵,大家理解一下就知道,如果你是項目經理,盡量避免這類問題,即節省開支,又能很好地解決問題,我們何樂而不為呢?
好,能給大家看的就這么多,還有一部分不能給大家看的,那就是我自己的一些很鋒利的思想,為了“做人還是低調點好”,只能放入我的私人日記,也許有一天我有權利拿出來給大家看時,再來共享我很幼稚的理念。
你能看到這,我非常感謝你,就像我們的客戶在使用我們做的軟件一樣,我們要感謝他,因為他們在使用我們做的軟件,如果人家偏不用你做的軟件你能怎么樣?所以說我們能給客戶做軟件我們都是幸運的。
經過了,就會有感受,今天說一下我對項目管理之項目設計的看法,因為我是做開發的,所以對設計了解點,項目管理除了設計還有溝通,風險控制等等,對項目的管理就是一個項目的指揮棒,其中對項目的設計是所有項目管理的核心部分,中等以上的公司都要對項目按照概要設計,詳細設計,實現,這樣的步驟走,不過國內的很多項目都沒有按照這樣的步驟,做的好像是三邊六拍的項目,邊思考,邊設計,邊實現,這樣做會做很多重復的工作,效率會很低,在國內為什么會出現這種現象呢?也許是對項目的風險的控制不是那么指揮若定,每個項目需求和設計都是要占一多半的時間的,實現也就是用那么幾天就可以了,所以,我們一直會擔心,就那么幾天行嗎?如果實現不了不是白白設計了嗎?其實沒有必要對自己的小弟不放心的,多給他二個銀子,他通宵也會給你實現的,再說了,你都設計好了,實現起來就比較容易了,如果我們對這方面有預知感,也許項目會做的就會得心應手了,如果邊設計邊實現,等程序員做一半時感覺這樣設計不好,就會回頭再設計再實現,我們不是說原型模型的軟件設計不好,但我們的資金往往不像微軟那樣有錢,投入和效益的周期不能太長,所以我們不要浪費了我們的代碼。把整個項目做到心中有數。
注:非常不喜歡文章中“小弟”這個稱呼......讓人不舒服。
2007年4月25日
1.
(1)代碼自動完成功能:Alt+/
(2)代碼格式化功能:Ctrl+shift+F
(3)jar包關聯源代碼
(4)打開類型,查看父類實現,查看類型層次結構,查看方法調用
2.代碼搜索
原代碼如下:
ckage com.comnew.demo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JDBCDrive {
public void testDB() throws ClassNotFoundException,SQLException{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection cn=null;
PreparedStatement stmt=null;
try
{
cn=DriverManaget.getConnection("jdbc:odbc:MQIS");
stmt=cn.prepareStatement("update T_T1 set FAge=20");
stmt.execute();
cn.clearWarnings();
StringBuffer sb=null;
}
catch(SQLException e)
{
throw e;
}
finally
{
if(stmt!=null)
{
stmt.close();
}
if(cn!=null)
{
cn.close();
}
}
}
public static void main(String[] args) {
}
}
糟糕,明天要交畢業設計初稿,這個先放一邊....
1.方法抽取:Extract Method
將calcCost中參數校驗部分抽取成方法verify.
選定代碼--->右鍵Refactor-->Extract Method
2.重命名:Rename
(1)重命名類名Test1為CostCalculator
(2)重命名User為UserInfo
選定類名-->右鍵Refactor-->Rename
3.內聯:Inlining
內聯方法add
內聯原因:調用方法越多,運行速度越慢
選定方法名("add")-->右鍵Refactor-->Inline
4.常量抽取:Extract Constant
原因:避免手誤
將"normal","vip"抽取成常量
選定字符串-->右鍵Refactor-->Extract Constant
5.抽取局部變量:Extract Local Voriable
將user,userType抽取成變量
原因:減少代碼長度,增加代碼可讀性
選定要抽取的變量(user.userName)-->右鍵Refactor-->Extract Local Variable
6.包裝字段:Encapsulate Field
重構user類,用set,get包裝
主菜單-->Refactor-->Encapsulate Field
7.抽取接口:Extract Interface
選定方法名(calcCost)-->右鍵Refactor-->Extract Interface-->Name:ICcstCalculator
重構后的代碼為:
(一)UserInfo.java
package com.comnew.demo;
public class UserInfo {
private String userName;
private String userType;
private int amount;
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public void setUserType(String userType) {
this.userType = userType;
}
public String getUserType() {
return userType;
}
public void setAmount(int amount) {
this.amount = amount;
}
public int getAmount() {
return amount;
}
}
(二)CostCalculator.java
package com.comnew.demo;
public class CostCalculator implements ICostCalculator {
private static final int VIPPRICE = 0;
private static final int NORMALPRICE = 10;
private static final String VIP = "vip";
private static final String NORMAL = "normal";
/* (non-Javadoc)
* @see com.comnew.demo.ICostCalculator#calcCost(com.comnew.demo.UserInfo)
*/
public int calcCost(UserInfo user)
{
verify(user);
int ret=0;
String userType = user.getUserType();
if(userType.equals(NORMAL))
{
ret=user.getAmount()+NORMALPRICE;
}
else if(userType.equals(VIP))
{
ret=user.getAmount()+VIPPRICE;
}
else
{
throw new IllegalArgumentException("useType的類型錯誤!必須未如下幾種:"+NORMAL+","+VIP);
}
return ret;
}
private void verify(UserInfo user) {
String useType = user.getUserType();
if(useType==null)
{
throw new IllegalArgumentException("userType不能為空!");
}
if(user.getAmount()<=0)
{
throw new IllegalArgumentException("amount必須大于0!");
}
}
public static void main(String[] args)
{
String userName="tom";
String userType=NORMAL;
int amount=20;
UserInfo user=new UserInfo();
user.setUserName(userName);
user.setUserType(userType);
user.setAmount(amount);
System.out.println(new CostCalculator().calcCost(user));
}
}
(三)ICostCalculator.java
package com.comnew.demo;
public interface ICostCalculator {
public abstract int calcCost(UserInfo user);
}