作者結(jié)合實(shí)際,總結(jié)了10條Java開(kāi)發(fā)人員應(yīng)該注意和避免的開(kāi)發(fā)習(xí)慣,希望這里提供的信息能幫助到你!
當(dāng)我看到成群的Java程序員在做下面這10件事情時(shí),我真想大聲喊“停”。
1.遍歷結(jié)果集并且構(gòu)建對(duì)象
while(result.next())
{Stringname=result.getString(“name”);
Stringaddress=result.getString(“address”);
Stringemail=result.getString(“email”);
Stringphone=result.getString(“phone”);
stuff.add(newAddressEntry(name,address,email,phone)); }
從這段代碼可以看出,如果你是個(gè)非專(zhuān)業(yè)或者頹廢派的開(kāi)發(fā)者,那么肯定沒(méi)有深入理解ORM(對(duì)象關(guān)系映射),這可能是因?yàn)槟憧催^(guò)Hibernate性能問(wèn)題方面的博客,并且受了這方面的影響。但可以肯定,你會(huì)使用JDBC模板或者其他后臺(tái)數(shù)據(jù)庫(kù)操作。
2.在事務(wù)系統(tǒng)中寫(xiě)PL/SQL
隨著時(shí)間的推移,業(yè)務(wù)邏輯將會(huì)在RDBMS中表現(xiàn)出來(lái)。設(shè)備事務(wù)也會(huì)移進(jìn)數(shù)據(jù)庫(kù)里面,有些人會(huì)把這些轉(zhuǎn)換成類(lèi)似COBOL的語(yǔ)言,并且綁定觸發(fā)器來(lái)調(diào)用其他通用版程序。換句話(huà)說(shuō),這樣做將會(huì)讓你在短期內(nèi)遇到一些非常棘手的系統(tǒng)遺留問(wèn)題。對(duì)于Oracle投資人來(lái)說(shuō),這或許是件好事,但對(duì)于我們來(lái)說(shuō),就是災(zāi)難。
3.編寫(xiě)Swing應(yīng)用程序或者調(diào)試
多年來(lái),我一直認(rèn)為編寫(xiě)GUI代碼是件非常可怕的事情,以至于我從不接觸前端代碼。這或許是因?yàn)镴ava被證明不適合做前端。Swing很慢。當(dāng)然,你也能編寫(xiě)出非常快的Swing代碼,如果你在NetBeans環(huán)境下去編寫(xiě)并且無(wú)需擔(dān)心瀏覽器兼容問(wèn)題、或者砸一堆錢(qián)進(jìn)去……但是,Swing還是很慢。默認(rèn)情況下,GUI的界面也是令人不滿(mǎn)意的。于是,出現(xiàn)了Javasandbox模型……
4.Cast
JavaGenerics并非完美,但在處理問(wèn)題時(shí),它卻成了優(yōu)先選擇對(duì)象。這里有一些非常極端的例子,說(shuō)明JavaGenerics并非能夠高效的執(zhí)行。說(shuō)實(shí)話(huà),我也不想這樣說(shuō):
Foobar=(Foo)FooFactory.get(“bar”);
不幸地是,有些庫(kù)無(wú)法獲得消息并且還會(huì)代碼泄漏,但可以利用泛型來(lái)編寫(xiě)單元測(cè)試
5.使用Calendar或Date進(jìn)行日期計(jì)算
使用JDKDate和Calendar類(lèi)來(lái)處理復(fù)雜的時(shí)間/日期計(jì)算,除了直觀(guān)上的操作外,內(nèi)置類(lèi)僅提供了原始的操作。大家可以使用像JODATime這樣的現(xiàn)代庫(kù)。除非你在x86匯編器上編寫(xiě)應(yīng)用程序。在這種的情況下,你可能很享受使用JDKDate和日歷進(jìn)行計(jì)算。
6.配置SessionReplication
所有的分布式緩存產(chǎn)品和項(xiàng)目已改為NoSQL的鍵值存儲(chǔ)。如果我們需要有狀態(tài)的客戶(hù)端并且不使用HttpSession,可以使用AJAX/Javascript,用于高度可靠的可伸縮應(yīng)用程序。
7.寫(xiě)排序算法
可怕的是,我很少注意算法類(lèi),甚至編寫(xiě)代碼的人也不會(huì)注意到這些,Java里面已經(jīng)提供了滿(mǎn)足各種需求的排序算法(或者是使用你名字命名的第三方庫(kù))或者他們只是不太關(guān)心Comparable和Comparator是如何實(shí)現(xiàn)的。現(xiàn)在,你可以深入地探討一下,是有益無(wú)害的。
8.寫(xiě)自己的鏈接列表、棧、堆等
誠(chéng)然,寫(xiě)一個(gè)基礎(chǔ)的鏈接列表相當(dāng)容易,Wikipedia上就提供了這樣的一個(gè)非常漂亮的頁(yè)面,上面匯集了所有的鏈表代碼。所以,我可以選擇復(fù)制——粘貼。但還是比較喜歡(建議)使用數(shù)據(jù)結(jié)構(gòu),并且一直堅(jiān)持。
9.編寫(xiě)自己的池、集合或者一般的并發(fā)代碼
凡是知道DougLea的開(kāi)發(fā)者肯定都很喜歡他。DougLea的java.utl.concurrent集合可以幫你解決很多并發(fā)性問(wèn)題,另外,他還能提供非常好的解決方案。
10.處理日志框架
如何拼寫(xiě)單詞,意味著所有的共享日志:SLF4J,例如S-U-CK。這個(gè)問(wèn)題不僅僅是因?yàn)槎嗄昵癝un把Log4J’s接口接入到JDK中,Oracle也編寫(xiě)java.util.logging包進(jìn)行修復(fù)。話(huà)雖如此,但我還是希望大家在suck上面標(biāo)準(zhǔn)化java.util.logging而不是由某個(gè)人提出“明智的解決方案”供大家采用。