前言

開源軟體的世界,我們一直帶著一顆敬畏之心來使用與學習,我們總覺得他們高高在上、他們完美無缺。但金無足赤,強如JDK、Spring也同樣有這樣或那樣的問題。

他們也並非那麼遙不可及,我們也未必只配仰望,這裡我們列舉開源軟體的那些「bad smell」,前車之鑒、後車之覆,開源軟體也同樣不完美。站在巨人肩膀上看到巨人的不完美,激勵著我們往更成功的巨人之路邁進 ?

JDK篇

Handler#setFormatter

代碼片段出自java.util.logging.Handler#setFormatter,作者為了不讓空指針異常下傳,提前做一次檢查,這本無可厚非,但採用這種方式來檢查,或許並不是個優雅的方案。

"Comments Do Not Make Up for Bad Code"

--- Robert C.Martin 《Clean Code》

同樣在java.util包下,java.util.Objects#requireNonNull在此處應該是更好的選擇。

public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {
if (obj == null)
throw new NullPointerException(messageSupplier.get());
return obj;
}

Spring篇

BeanUtils#copyProperties

代碼出自org.springframework.beans.BeanUtils#copyProperties,代碼中引入了過多的if,嵌套的層級達到6層之多。但細看不難發現,其實都不是不同的邏輯分支,而是一些filter過濾,一方面用lambda的filter可以優化,提前return也是個不錯的選擇。

"Deeply nested code hurts readability and is error-prone"

--- Google Code Health Series

後續

「挑刺」不是目的,有則改之無則加勉,他人之優與劣、功與過皆能在成功路上,助我等一臂之力。

本文作者:聶曉龍

原文鏈接

更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎

本文為雲棲社區原創內容,未經允許不得轉載。

推薦閱讀:

查看原文 >>
相關文章