阿里巴巴Java開發規範OOP規約(1)
阿新 • • 發佈:2022-05-11
OOP規約:OOP規約指的是面向物件程式設計規範,英文全稱是 Object Oriented Programming
【強制】避免通過一個類的物件引用訪問此類的靜態變數或靜態方法,無謂增加編譯器解析成
本,直接用類名來訪問即可。
【強制】所有的覆寫方法,必須加@Override 註解。 說明:getObject()與 get0bject()的問題。一個是字母的 O,一個是數字的 0,加@Override 可以準確判斷是否覆蓋成功。另外,如果在抽象類中對方法簽名進行修改,其實現類會馬上編 譯報錯
【強制】相同引數型別,相同業務含義,才可以使用 Java 的可變引數,避免使用 Object。 說明:可變引數必須放置在引數列表的最後。(提倡同學們儘量不用可變引數程式設計) 正例:public User getUsers(String type, Integer... ids) {...}
【強制】外部正在呼叫或者二方庫依賴的介面,不允許修改方法簽名,避免對介面呼叫方產生
影響。介面過時必須加@Deprecated 註解,並清晰地說明採用的新介面或者新服務是什麼。
@Deprecated 表示此方法已廢棄、暫時可用,但以後此類或方法都不會再更新、後期可能會刪除,建議後來人不要呼叫此方法。
相似註解: @deprecated :有此註解後,Javadoc 工具生成文件時會標註此類/介面、方法、欄位已經被廢止。
【強制】不能使用過時的類或方法。 說明:java.net.URLDecoder 中的方法 decode(String encodeStr) 這個方法已經過時,應 該使用雙引數 decode(String source, String encode)。介面提供方既然明確是過時介面, 那麼有義務同時提供新的介面;作為呼叫方來說,有義務去考證過時方法的新實現是什麼。
【強制】Object 的 equals 方法容易拋空指標異常,應使用常量或確定有值的物件來呼叫 equals。 正例:"test".equals(object); 反例:object.equals("test"); 說明:推薦使用 java.util.Objects#equals(JDK7 引入的工具類)
這一點很常用!!!!
【強制】所有的相同型別的包裝類物件之間值的比較,全部使用 equals 方法比較。 說明:對於 Integer var = ? 在-128 至 127 範圍內的賦值,Integer 物件是在 IntegerCache.cache 產生,會複用已有物件,這個區間內的 Integer 值可以直接使用==進行 判斷,但是這個區間之外的所有資料,都會在堆上產生,並不會複用已有物件,這是一個大坑, 推薦使用 equals 方法進行判斷。
IntegerCache.cache :看jdk原始碼可以發現,integer 類會提前通過IntegerCache.cache 例項化【-128 到127 】之間的資料
這篇博文講的很詳細:https://www.cnblogs.com/wellmaxwang/p/4422855.html
對於equals方法,如果是引用型別,比較的是地址。但Integer類重寫了,JDK原始碼如下:
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
比較的是值。所以確實要用equals去比較兩個包裝類。