1. 程式人生 > 其它 >阿里巴巴Java開發規範OOP規約(1)

阿里巴巴Java開發規範OOP規約(1)

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 = ? 在-128127 範圍內的賦值,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去比較兩個包裝類。