摘要: # 前言  开源软件的世界,咱们一直带着一颗敬畏之心来使用与学习,咱们总以为他们高高在上、他们天衣无缝。但金无足赤,强如JDK、Spring也一样有这样或那样的问题。 他们也并不是那么高不可攀,java
开源软件的世界,咱们一直带着一颗敬畏之心来使用与学习,咱们总以为他们高高在上、他们天衣无缝。但金无足赤,强如JDK、Spring也一样有这样或那样的问题。
他们也并不是那么高不可攀,咱们也未必只配仰望,这里咱们列举开源软件的那些“bad smell”,前车可鉴、后车之覆,开源软件也一样不完美。站在巨人肩膀上看到巨人的不完美,激励着咱们往更成功的巨人之路迈进 ?spring
代码片断出自java.util.logging.Handler#setFormatter,做者为了避免让空指针异常下传,提早作一次检查,这本无可厚非,但采用这种方式来检查,或许并非个优雅的方案。学习
"Comments Do Not Make Up for Bad Code"
--- Robert C.Martin 《Clean Code》优化
一样在java.util包下,java.util.Objects#requireNonNull在此处应该是更好的选择。ui
public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) { if (obj == null) throw new NullPointerException(messageSupplier.get()); return obj; }
代码出自org.springframework.beans.BeanUtils#copyProperties,代码中引入了过多的if,嵌套的层级达到6层之多。但细看不难发现,其实都不是不一样的逻辑分支,而是一些filter过滤,一方面用lambda的filter能够优化,提早return也是个不错的选择。spa
"Deeply nested code hurts readability and is error-prone"指针
--- Google Code Health Seriescode
“挑刺”不是目的,有则改之无则加勉,他人之优与劣、功与过皆能在成功路上,助我等一臂之力。
PS.本文会长期跟进,你们有发现一些开源软件的坏味道,也能够直接在评论区留言,或发至个人邮箱 xiaolong.nxl@alibaba-inc.com,我会整理好后更新进去。orm
原文连接blog