深入学习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) 返回非的哈希码 |
static boolean |
isNull(Object obj) 返回 |
static boolean |
nonNull(Object obj) 退货 |
static <T> T |
requireNonNull(T obj) 检查指定的对象引用不是 |
static <T> T |
requireNonNull(T obj, String message) 检查指定的对象引用不是 |
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();
}