文章目錄
-
- 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));
}
requireNonNull
requireNonNull方法傳入一個對象,如果這個對象為null,就抛出空指針異常,也可以自定義抛出的異常資訊message
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
compare
主要用于比較,我們可以自定義對應的比較器。
nonNull
可以用來判斷對象是否非空
public static boolean nonNull(Object obj) {
return obj != null;
}
總之,希望大家可以把Objects這樣的類用起來,讓自己的代碼長的更好看點啦😂