因爲有些要求感覺實是太過奇葩,收集下來娛樂下大家。
代碼規範要求
要求如果代碼可以靜態導入的話,就必須要靜態導入。
所有的代碼如果不靜態導入,就直接 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 的。
可能在很多包中都用了這個方法名。
這種奇葩的強制使用靜態導入的要求,簡直是令人髮指,在特定階段的時候破壞了程序的可讀性。
在實際使用的時候,對於一些公共方法名,儘量不要使用靜態導入。
但是針對測試的一些測試類中使用的斷言,還是可以使用靜態導入的。
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
如果上面我們常用的一些測試中使用的斷言。