摘要:沒有操作符重載。最終類型在所有情況下應該是默認的,并用作為修飾符。這樣就會減少現(xiàn)在你會在和一些第三方的中見到的那些令人困惑的歷史遺留方法。在用過或是最新的之后你會覺得非常的繁瑣。這是最常見的關于的吐槽,但它這就是事實。
啊哈Reddit,沒了你我們還能在哪里從魚目混珠的網(wǎng)絡中提煉真正的精華?就在這雜亂無章的論壇中,的的確確存在著這樣一些精辟的討論。
比如有個叫Shambloroni的兄弟發(fā)起了一個引起廣泛共鳴的話題(收到了150個回復和投票)。話題的開始是他在吐槽?Java?有哪些方面最讓他感到厭煩,同時他又向其他程序猿征集關于編寫Java時令人蛋疼(傷感……)的故事。
下面我列出了一些最有意思的回復——你會同意嗎?
Try-catch?聲明之殤雖然我才剛剛開始編寫?Java?程序,但是在Java?中實現(xiàn)讓程序停頓一些時間然后繼續(xù)運行這件事情已經(jīng)復雜的令我震驚。除了寫下基本的指令完成停頓外,我還必須要用?try-catch?來包裹的這些操作。沒準對于大牛來說這不算什么,但是對我來講這太令人難過了。
還有跟所有?IO相關的異常也讓許多簡單的事情變得繁瑣起來。比如我僅僅想簡潔地做些事情,但最后總是會搞砸,。然后我不得不在所有方法上加上“throws?Exception”。
沒有,沒有,還是沒有沒有無符號的整形。
沒有操作符重載。
沒有對象屬性。
沒有代理
我同樣痛恨很多?Java?庫中引入模塊的方式(比如根據(jù)名稱加載模塊)。相對而言,我更希望在編譯時就能檢查我需要的依賴庫是否已經(jīng)加載了。
找不到愛…我恨?Java,就是單純的恨。負責任地說,我從不使用?Java?寫程序的最大因素就是因為我恨它。還有一點就是JRE糟糕的模塊化。就算你用了一些加載工具比如Launch4j,你仍然需要讓用戶安裝一個超過200?MB?的框架來運行程序。
沒有getter、setterJava還缺少getter和setter注解。這樣可以更簡單的添加和移除模板代碼。
缺乏亮點Java?缺少一些殺手級的模塊。雖然聽說一些不錯的模塊將被加入到Java?9.x?中,但目前為止這是我最大的槽點了。
非暴力不合作我遇到的最大的麻煩就是如何一起使用基本元素和對象。例如,?把一個char[]類型的變量轉(zhuǎn)換成一個列表別提有多費勁了,而且我感覺這種操作根本沒必要這么麻煩。
心愿單我最想要的就是像?Perl?中那種上下文相關的函數(shù)了,以及當處理真正的異常時,這些函數(shù)可以在一個語言中所扮演的角色。
我還希望?Java?可以支持智能打包返回值,這樣我們就可以像在Perl中那樣返回一個包含多個值的列表了。
我希望使用異常的標準庫還可以在不適合拋出異常的場景下使用并能夠處理失敗。
還有,另一個煩人的地方就是我在用?StringWriter?時候還要處理?IO?異常。
還缺些什么缺少宏對我來說使?Java?減分不少(我并不說在?C/C++?中使用的預處理器宏,而是在Lisp/Scheme?中使用的那種宏)。
不論做什么事情你都需要定義一個類,盡管你可能根本不需要一個類。比方說,我想把一段經(jīng)常使用的代碼提取出來,然后在需要地方使用——為了達到這個目的,我必須要把這段代碼封裝成一個final?static的方法,并放在一個類中。這樣一來我還得費勁去給類取一個方便理解的名字……本來這事兒可以很簡單(這確實很簡單,?尤其是當你可以定義宏的時候)。
有沒有搞錯缺乏對泛型的支持。C++?中的模板要強大的多。
事實上,在Java?中你根本不能在泛型中實例化一個類,除非你把這個類作為參數(shù)來聲明一個泛型。
你很難給一個類加上結(jié)構(gòu)函數(shù)并讓它銷毀這個類。RAII(一種資源管理模式,見?C++)卻一直非常有用。
?沒有操作符重載。C++?允許你是將?==?操作符用于比較字符串。同樣的,大整數(shù)運算因為同樣的原因變的很難使用。
呃,?好吧沒有無符號的基礎類型。這尼瑪是鬧哪樣??!
還是getter、setternull(最大槽點)。
沒有getter和setter注解(例如,沒有屬性)。
Java?只支持位置參數(shù)。我喜歡像Smalltalk?那種支持多樣化的參數(shù)形式,或者是強制使用關鍵字參數(shù)的Python?3。
比如在?Samlltalk?中調(diào)用一個具有兩個參數(shù)的函數(shù),可以這樣做:
myInstance?myMethodWithFoo:?arg1?Bar:?arg2
在?Python中你可以使用下面的語法來調(diào)用函數(shù)并給函數(shù)參數(shù)賦值:
my_inst.my_method(foo=arg1,?bar=arg2)
不支持多分派(Multiple Dispatch)?
這些是我最先想到的,不過覺得應該還有更多。認真地說,使用回調(diào)函數(shù)一直是一個大問題,因為它太麻煩了。不過Java?8?中解決了這個問題,我還是很開心的?=)
愚蠢的默認值默認的可見性。如果沒有給變量或方法一個修飾符,那么這個方法應該是私有的,而不是包內(nèi)可見。
默認的修改能力。最終類型(在所有情況下)應該是默認的,并用“var”作為修飾符。目前的情況是,程序員很少會把一個方法的參數(shù)設置為最終類型,因為那樣會讓變量很快變得不可讀。同時,在一個方法中重寫參數(shù)也是很少見的情況。
集合接口。Java?中應該提供一個可寫的集合接口,現(xiàn)在集合繼承自這個可寫的接口,只是把所有改變集合內(nèi)容的方法屏蔽掉。這樣就會減少現(xiàn)在你會在Collections.unmodifiable……()?和一些第三方的API中見到的那些令人困惑的歷史遺留方法。有了可寫的集合接口,Java?將會變得更加類型安全。
缺少表達能力。在用過Scala(或是最新的PL)之后,?你會覺得Java?非常的繁瑣。這是最常見的關于Java?的吐槽,但它這就是事實。
說說異常被強迫的處理異常——真主保佑你。誰能告訴我為什么我非要用try-catch?來包裹每一個Thread.sleep()……?我從來就沒有真正見過那個我被要求去處理的InterruptedException。
我知道我要說的可能不是一個廣泛認可的問題,但是我真的同意checked?exception(應被檢查的異常)很煩人。這些異常讓代碼變得面目全非還讓重構(gòu)變得不可能。我明白他們?yōu)槭裁创嬖冢ǘ依碚撋弦舱f的通),但是他們沒為開發(fā)者帶來什么實質(zhì)好處。不論你做什么,都不要留一個空的catch?塊,就算你認為這個異常永遠不會發(fā)生。你大可以把這個checked?exception用RuntionException(運行時異常)重新封裝一下,再拋出去。
原文 jaxenter
翻譯 ImportNew - 靳禹
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64040.html
摘要:當我嘗試為招一個程序員時,我發(fā)現(xiàn)這項任務相當艱巨。我承諾給其中一位侯選人一輛凱迪拉克,但最終沒有打動他。你會得到一輛年的凱迪拉克作為簽約的報酬。大神是一名還不存在的產(chǎn)品的前端工程師。 周五,2010年8月13號, 作者:anutron 編者注: 這篇文章寫于2010年作者工作在Cloudera期間,當時node.js還沒有流行,很多人還瞧不上javascript這門簡陋的腳本,文章提...
摘要:前言面試中對于技術職位,一般分筆試與面談,如果面試官的一些小問題你可以立馬找到對應的知識點擴展開來,那么這就是你的優(yōu)勢,本系列將講述一些面試中的事,不會很詳細,但是應該比較全面吧。 前言 面試中對于技術職位,一般分筆試與面談,如果面試官的一些小問題你可以立馬找到對應的知識點擴展開來,那么這就是你的優(yōu)勢,本系列將講述一些java面試中的事,不會很詳細,但是應該比較全面吧。 主要內(nèi)容 說到...
摘要:問對于程序員修煉之道你有下一步的計劃嗎程序員修煉之道這個項目很好,寫作的過程也很愉快。而最上層的程序員則是時刻對技藝以及技術的本質(zhì)著迷。這也是的一大優(yōu)勢。 非商業(yè)轉(zhuǎn)載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/127453 Ben Evans是jClarity的聯(lián)合創(chuàng)始人。其公司致力于開發(fā)可以為開發(fā)和運維團隊提...
閱讀 3896·2021-11-24 11:14
閱讀 3339·2021-11-22 13:53
閱讀 3901·2021-11-11 16:54
閱讀 1590·2021-10-13 09:49
閱讀 1236·2021-10-08 10:05
閱讀 3412·2021-09-22 15:57
閱讀 1767·2021-08-16 11:01
閱讀 983·2019-08-30 15:55