天天看點

你知道Object類和Objects的常用方法嗎

文章目錄

    • Object的常用方法
    • Objects的常用方法
      • hashCode
      • hash
      • isNull
      • equals
      • requireNonNull
      • compare
      • nonNull
大家好,Leo又來了!!!最近在網上看到别人分析Objects中isNullfanfan方法來判斷,我就想到之前寫的一坨坨==null,突然很慚愧,特地去研究學習下,争取下次可以用上.
你知道Object類和Objects的常用方法嗎

Object的常用方法

方法 作用
clone() 建立此對象的副本
equals() 判斷他與某個對象是否“相等”
getClass() 傳回此類運作時類,通過在反射時會用到
hashCode() 擷取到這個對象的哈希碼值
notify() 喚醒在對象監聽器上等待的一個線程
notifyAll() 喚醒在此對象監聽器上等待的所有線程
toString() 傳回此對象的字元串表示
wait() 讓目前線程進入等待狀态

Objects的常用方法

hashCode

每一個對象都有自己的hashCode,不同對象的hashCode可能相同

hash

在Objects中,hash是傳入參數是一個不定長度的參數,底層也是

isNull

在Objects中這個方式判斷對象是否為null是非常優雅的,比如下面這段代碼,如果每一個都用 == null,屬實是比較亂了,但是如果我們使用isNull這種寫法會簡潔并且明了很多,代碼也更加統一

@Override
    @Transactional(rollbackFor = Exception.class)
    public void updateStudentById(Student student) {

        if (null == student) {
            throw new RuntimeException("對象為空,更新失敗!");
        }
        if (Objects.isNull(student)) {
            throw new RuntimeException("對象為空,更新失敗!");
        }

    }
           

equals

這個方法在判斷兩個對象是否相等,或者字元串是否相等非常常用,那使用這個方法時也需要考慮一個問題就是a.equals(b),a不能為null,否則會抛出NullPointerException,但是在Objects.equals方法是可以很好避免這個問題,我們就可以減少對a是否非null的判斷,在equals中是已經進行了判斷

public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}
           
你知道Object類和Objects的常用方法嗎

requireNonNull

requireNonNull方法傳入一個對象,如果這個對象為null,就抛出空指針異常,也可以自定義抛出的異常資訊message

public static <T> T requireNonNull(T obj) {
   if (obj == null)
       throw new NullPointerException();
   return obj;
}
           

compare

主要用于比較,我們可以自定義對應的比較器。

你知道Object類和Objects的常用方法嗎

nonNull

可以用來判斷對象是否非空

public static boolean nonNull(Object obj) {
    return obj != null;
}
           
總之,希望大家可以把Objects這樣的類用起來,讓自己的代碼長的更好看點啦😂