深入學習java原始碼之Objects.deepEquals()與Objects.nonNull()
深入學習java原始碼之Objects.deepEquals()與Objects.nonNull()
該類由static用於對物件進行static實用方法組成。 這些實用程式包括用於計算物件的雜湊碼的null -safe或null方法,為物件返回一個字串,並比較兩個物件。
方法
Modifier and Type | Method and Description |
---|---|
static <T> int |
compare(T a, T b, Comparator<? super T> c) 返回0,如果引數都是相同的, |
static boolean |
deepEquals(Object a, Object b) 返回 |
static boolean |
equals(Object a, Object b) 返回 |
static int |
hash(Object... values) 為輸入值序列生成雜湊碼。 |
static int |
hashCode(Object o) 返回非的雜湊碼 null 引數。 |
static boolean |
isNull(Object obj) 返回 |
static boolean |
nonNull(Object obj) 退貨 |
static <T> T |
requireNonNull(T obj) 檢查指定的物件引用不是 |
static <T> T |
檢查指定的物件引用不是 |
static <T> T |
requireNonNull(T obj, Supplier<String> messageSupplier) 檢查指定的物件引用不是 |
static String |
toString(Object o) 返回非 |
static String |
toString(Object o, String nullDefault) 如果第一個引數不是 |
java原始碼
package java.util;
import java.util.function.Supplier;
public final class Objects {
private Objects() {
throw new AssertionError("No java.util.Objects instances for you!");
}
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
public static boolean deepEquals(Object a, Object b) {
if (a == b)
return true;
else if (a == null || b == null)
return false;
else
return Arrays.deepEquals0(a, b);
}
public static int hashCode(Object o) {
return o != null ? o.hashCode() : 0;
}
public static int hash(Object... values) {
return Arrays.hashCode(values);
}
public static String toString(Object o) {
return String.valueOf(o);
}
public static String toString(Object o, String nullDefault) {
return (o != null) ? o.toString() : nullDefault;
}
public static <T> int compare(T a, T b, Comparator<? super T> c) {
return (a == b) ? 0 : c.compare(a, b);
}
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
public static <T> T requireNonNull(T obj, String message) {
if (obj == null)
throw new NullPointerException(message);
return obj;
}
public static boolean isNull(Object obj) {
return obj == null;
}
public static boolean nonNull(Object obj) {
return obj != null;
}
public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {
if (obj == null)
throw new NullPointerException(messageSupplier.get());
return obj;
}
}
丟擲以表明斷言失敗。
此類提供的七個單引數公共建構函式確保呼叫返回的斷言錯誤:
new AssertionError(expression) 具有作為其詳細訊息表達的字串的轉換 (如在The Java™ Language Specification部15.18.1.1定義),而不管表達的型別。
java原始碼
package java.lang;
public class AssertionError extends Error {
private static final long serialVersionUID = -5013299493970297370L;
public AssertionError() {
}
private AssertionError(String detailMessage) {
super(detailMessage);
}
public AssertionError(Object detailMessage) {
this(String.valueOf(detailMessage));
if (detailMessage instanceof Throwable)
initCause((Throwable) detailMessage);
}
public AssertionError(boolean detailMessage) {
this(String.valueOf(detailMessage));
}
public AssertionError(char detailMessage) {
this(String.valueOf(detailMessage));
}
public AssertionError(int detailMessage) {
this(String.valueOf(detailMessage));
}
public AssertionError(long detailMessage) {
this(String.valueOf(detailMessage));
}
public AssertionError(float detailMessage) {
this(String.valueOf(detailMessage));
}
public AssertionError(double detailMessage) {
this(String.valueOf(detailMessage));
}
public AssertionError(String message, Throwable cause) {
super(message, cause);
}
}
一個Error是的子類Throwable表示嚴重的問題,合理的應用程式不應該試圖捕獲。 大多數這樣的錯誤是異常情況。 ThreadDeath錯誤雖然是“正常”的條件,但也是Error一個子類,因為大多數應用程式不應該試圖抓住它。
一個方法不需要在其throws子句中宣告Error的Error ,該子類可能在執行方法期間丟擲,但未被捕獲,因為這些錯誤是不應該發生的異常條件。 也就是說, Error及其子類被視為未經檢查的異常,用於編譯時檢查異常。
package java.lang;
public class Error extends Throwable {
static final long serialVersionUID = 4980196508277280342L;
public Error() {
super();
}
public Error(String message) {
super(message);
}
public Error(String message, Throwable cause) {
super(message, cause);
}
public Error(Throwable cause) {
super(cause);
}
protected Error(String message, Throwable cause,
boolean enableSuppression,
boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
當應用程式嘗試在需要物件的情況下使用null時丟擲。 這些包括:
呼叫一個null物件的例項方法。
訪問或修改null物件的欄位。
取null的長度,好像是一個數組。
訪問或修改的時隙null就好像它是一個數組。
投擲null好像是一個Throwable價值。
應用程式應該丟擲此類的例項以指示null物件的其他非法使用。 NullPointerException物件可以由虛擬機器構建,就像suppression were disabled and/or the stack trace was not writable一樣 。
package java.lang;
public
class NullPointerException extends RuntimeException {
private static final long serialVersionUID = 5162710183389028792L;
public NullPointerException() {
super();
}
public NullPointerException(String s) {
super(s);
}
}
沒有要求每次呼叫供應商時都會返回新的或不同的結果。
這是一個functional interface的功能方法是get() 。
Modifier and Type | Method and Description |
---|---|
T |
get() 獲得結果。 |
java原始碼
package java.util.function;
@FunctionalInterface
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}