
阿裡妹導讀:潛力修煉一年之久的《Java 開發手冊(泰山版)》今天釋出!此次共計新增 34 條規約,修改描述 90 處,其中錯誤碼規則更是第一次提出完整的解決方案,大家參考錯誤碼示例表,歡迎大家下載下傳與閱讀。
免費下載下傳連結:
https://developer.aliyun.com/topic/java2020?utm_content=g_1000113416“蕩胸生層雲,決眦入歸鳥”,《Java 開發手冊(泰山版)》正式和大家夥見面了!秉承着“碼出高效,碼出品質”的一貫願景,泰山小哥跳着歡快的步伐向大家走來了,以下是他的獨白:
自華山版現身武林以來,大家都叫泰山泰山快現身,但是一開始我是拒絕的,不能因為你說來,我就馬上來,直到我遇到了 stream.Collectors 類下 toMap() 方法的坑,轉化邏輯對我等鍵盤俠來說應該是手到擒來,誰知一腳深坑踩進了無底洞,兩個相同 key 的轉化時就已經撂挑子了。怎奈禍不單行,toMap() 大哥在進行值為 null 的轉化邏輯時突然的空指針異常,又一次給了我沉痛一擊,于是我悔悟,我惶恐,我連夜買着站票趕來見大家,欲知詳情如何,請速速下載下傳《Java 開發手冊(泰山版)》。
錯誤碼一統中原
夜色中的火車駛過泰安站,我朦胧欲睡時,邊上的 HTTP 小哥傳來一個聲音“嘿,兄弟,前方道口 404 信号燈了”,我一臉懵逼狀,然後他就開始嘲笑我們後端程式之間紛繁複雜又各自為政的錯誤碼定義,這讓我十分沒有面子。但是今天!這樣局面就要被終結!你還在為雜亂的錯誤碼而煩惱麼?統一錯誤碼,就是統一度量衡,為你的應用與服務的穩定保駕護航,煩惱清空,快樂回家。
泰山版新近出爐的錯誤碼具有快速溯源、簡單易記、溝通标準化三大優勢。錯誤碼為字元串類型,共 5 位,分成兩個部分:錯誤産生來源和四位數字編号。錯誤産生來源分為A/B/C,以目前代碼運作視角來進行判定:
A 表示錯誤來源于使用者,比如請求參數錯誤,使用者安裝版本過低等問題。
B 表示錯誤來源于目前系統,往往是業務邏輯出錯,或程式健壯性差等問題。
C 表示錯誤來源于第三方服務,比如 CDN 服務出錯,消息投遞逾時等問題。
優秀的錯誤碼可以迅速知道他們是怎麼來滴,從哪兒來滴,來幹啥滴。同時俺們的錯誤碼具有三級結構,分為一級宏觀錯誤碼、二級宏觀錯誤碼、三級宏觀錯誤碼,你想要的,泰山我全部都有。
閏年多一天多一絲煩惱
蔡國慶叔叔曾唱過“一年有三百六十五個日出,我送你三百六十五個祝福”,當閏年的時候,我們就會有一天收不到蔡叔叔的祝福了。雖前有“千年蟲”之鑒,但好多朋友卻開始在代碼中玩兒起了“閏年蟲”,一個寫死為 365 天的年份天數,在閏年裡讓大家嘗盡了悲傷痛楚,比如,緩存有效期 = 3652460*60 秒,結果提前一天所有緩存同時失效,高并發通路時資料庫就跪了。對此,泰山我不禁要問了,LocalDate 它不香麼,你要的年份、天數,它通通擁有,聽哥的,以後這坑啊,咱不踩。
表的别名
“在這表的世界裡,為什麼我不配擁有一個簡潔的江湖頭銜?”SQL 老弟常常對我說這日子他過得憋屈。 “泰山大哥,你知道麼?我在一個多表操作的 SQL 中大吼一聲行者孫,竟然活生生蹦出了倆,劈頭蓋臉那就是給我一頓胖揍。”多表連接配接操作的時候,當一個相同的列名出現在多個表的時候就是會如此,多個行者孫打架鬥毆的場面屢見不鮮。我們能做的就是用表的别名(或表名)來給這些小猴子般的操作列加上限定,不然花果山的猴子就會跟果子嶺的猴子起沖突,讓我等鍵盤俠淪落于無窮的 BUG 地獄中,不得超脫。
代碼無空行憋得慌
遙望東海,當年我也是代碼屆一蛟龍,可上九天攬月,可下五洋抓鼈,但是有些仁兄的百餘行一站到底式的瀑布式寫法還是讓我玉面小蛟龍感受到了窒息的滋味。代碼和人一樣,憋久了也是要換氣的,未來你的代碼要被很多人閱讀和修改,是以,不要讓閱讀者感到憋悶和窒息,也是好的代碼應該做的事情,當某個方法的代碼行數超過 10 行時,return / throw 等中斷邏輯的右大括号後加一個空行。合适的換行能夠讓閱讀者獲得喘息的機會,更能讓代碼之間的組織方式更加的協調。
三目運算符的任性
三目運算符這個外表看起來老實巴交的孩子卻不是個好相處之輩,竟然也玩起了兒時類型轉化的遊戲,讓我等好漢折了腰。這是咋回事兒呢?原來在三目運算符中:
condition ? 表達式 1 : 表達式 2
表達式 1 和 2 在涉及算術計算或資料類型轉換時,會觸發自動拆箱。拆箱操作本來沒有問題,但是當其中的操作數為 null 值時,一個大大的 NPE 就砸到了我滴臉上,泰山我不能讓兄弟們前赴後繼踩進深坑裡,跌得鼻青臉腫,下面就複原下現場,大家回家思考一下為啥抛出 NPE 異常:
Integer a = 1;
Integer b = 2;
Integer c = null;
Boolean flag = false;
Integer result = (flag ? a * b : c);
寄語未來
本次泰山版是一次全新的革新,涉及到集合轉化函數式接口中的深坑、年份天數寫死所帶來的問題、SQL 多表操作未加表名對字段限制慘案、以及統一錯誤碼能夠為我們帶來的巨大好處,更多的細節與精彩我們可以在泰山版手冊中細細品讀。這些年來我們同全球有着相同極緻追求的開發者一起,不斷的完善和疊代着 Java 開發手冊,用技術情懷去做一件幫助所有 Java 開發者們避免踩坑。因為相信,是以看見,未來我們将一起繼續為全球的 Java 開發者們服務,緻力于消滅各類程式中的疑難病症。
手冊中每一條規約的背後都有一段或悲傷或遺憾的故事,将前人的曆史經驗沉澱下來,讓後面的人的路走的更平坦。我們于小中見大,于細微處見真章。“見渺小之物必細查其紋理”,可能也是我輩技術人獨有的浪漫,small is powerful, small is beautiful。
再次感謝各位全球開發者,本次《Java 開發手冊(泰山版)》共計新增 34 條規約,修改描述 90 處,其中錯誤碼規則更是第一次提出完整的解決方案,歡迎大家下載下傳與閱讀。下一個版本“嵩山版”,咱們少林寺見真功夫。
點選下方連結,瘋狂下載下傳《Java 開發手冊(泰山版)》吧: