聊聊那些奇葩的代碼規範 —— 濫用靜態導入

因爲有些要求感覺實是太過奇葩,收集下來娛樂下大家。

代碼規範要求

要求如果代碼可以靜態導入的話,就必須要靜態導入。

所有的代碼如果不靜態導入,就直接 PR 拒絕合併。

舉例:
equalsAnyIgnoreCase("test","test"); 這個必須要使用 import static org.apache.commons.lang3.StringUtils.equalsAnyIgnoreCase;

如果我們寫成:
StringUtils.equalsAnyIgnoreCase("test","test");

奇葩的架構師,要求這個必須要修改爲靜態導入。

奇葩解讀

Java 的靜態導入 (import static) 是從 JDK 1.5 版本開始提供的,其目的是爲了減少字符輸入量,提高代碼的可閱讀性,以便更好地理解程序。

用於導入指定類的某個靜態成員變量、方法或全部的靜態成員變量、方法。如果一個類中的方法全部是使用 static 聲明的靜態方法,則在導入時就可以直接使用 import static 的方式導入。

濫用靜態導入會使程序更難閱讀,更難維護。

靜態導入後,代碼中就不用再寫類名了,但是我們知道類是“一類事物的描述”,缺少了類名的修飾,靜態屬性和靜態方法的表象意義就會被無限方法,這會讓閱讀者很難弄清楚其屬性或方法代表何以,甚至是哪一個類的屬性(方法)都要思考想一下,特別是在一個類中有多個靜態導入的時候還使用了通配符(*)這個靜態導入簡直是個噩夢。

還是用 StringUtils 來舉例。

不是隻 Apache Commons 纔有 StringUtils 的。

 

2023-06-08_12-10-23

 
隨便拉個項目,你看看就有多少個 StringUtils,同時 equalsAnyIgnoreCase 這個方法名也不是在一個包使用的。

可能在很多包中都用了這個方法名。

這種奇葩的強制使用靜態導入的要求,簡直是令人髮指,在特定階段的時候破壞了程序的可讀性。

在實際使用的時候,對於一些公共方法名,儘量不要使用靜態導入。

但是針對測試的一些測試類中使用的斷言,還是可以使用靜態導入的。


import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;

如果上面我們常用的一些測試中使用的斷言。

 

https://www.ossez.com/t/topic/14492

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章