JavaにおけるObjectsクラスのメソッドたち

19433 ワード

Objectクラスの宣言と構築関数
public final class Objects{

	private Objects(){
        throw new AssertionError("No java.util.Objects instances for you!");
    }
}

まず、Objectsの宣言はpublicとfinalであり、これはすべてのコードがObjectsの静的メソッドに直接アクセスできることを意味するが、Objectsクラスを直接明示的に継承することはできない.実際、次のソースコードを読むことで、Objectsクラスはオブジェクトとオブジェクトの間のメソッドに多くの役割を果たすソースコードライブラリのようなものであることがわかりました.この一連のstaticメソッドにより、オブジェクトとオブジェクトの関係やオブジェクトの表示などの問題を解決しました.
次に、Objectsの構造方法はprivateであり、通常のprivateの構造方法は単例モードに現れるが、後のコードセグメントには通常の単例モードに対応するprivate staticのObjectsオブジェクトは現れないので、開発者がこのように書く目的は、ユーザーが自分でObjectクラスを宣言することを許さないことである.構造方法の唯一の行のコードは異常を投げ出すことであり,この考えも裏付けられている.
“No java.util.Objects instances for you!” Objectsはお前のために使ったんじゃない!
equals:2つのオブジェクトの等しい
public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}

equalsはstaticの方法で、返される値は2つの関数が等しいかどうかの真の値です.真の値を満たすには2つの条件の1つが必要です.
 1.            
 2.  a  ,    equals(b)       。

ここでは、aのequalsが書き換えられる可能性があり、bがnullであってもtrueを返す可能性があることを追加する必要があります.
deepEqualsメソッド
deepEqualsは主に配列オブジェクトを対象としています.
    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);
}

Arrays.deepEquals 0(a,b)メソッドは、実際には配列内のすべてのオブジェクトがequalsであるかどうかを順次チェックする方法であり、実際にはdeepEqualsを呼び出すことで、この方法は多次元配列にも適用されます.
hashCodeとhash
この2つの方法は、単一のObjectと複数のObjectオブジェクトに対してそれぞれハッシュコードを取得することである.プロジェクトでは、HashTable、HashSetなどのデータ構造について、数日後にこれらの研究を理解し、書き直して別のブログを送ります.
public static int hashCode(Object o) {
    return o != null ? o.hashCode() : 0;
}

public static int hash(Object... values) {
    return Arrays.hashCode(values);
}

toStringメソッド
JAvaでは、2つのtoStringメソッドが定義されています.
public static String toString(Object o) {
    return String.valueOf(o);
}

public static String toString(Object o, String nullDefault) {
    return (o != null) ? o.toString() : nullDefault;
}

この方法はPythonの中の__とstr__同様に、1つのオブジェクトを文字列に変換するという人が直接受け入れることができる信号です.結局、すべてのプログラムは結局、人のために奉仕しているので、人が受信できる情報も欠かせません.最も簡単で最もお得な方法は文字列です.2つ目のリロード方法は、オブジェクトが空の場合、デフォルトの文字列nullDefaultを返します.そうでなければ、空の文字列に遭遇したときに直接nullを返します.
compare比較
public static <T> int compare(T a, T b, Comparator<? super T> c) {
    return (a == b) ? 0 :  c.compare(a, b);
}

オブジェクトcの比較方法を呼び出し、aとbの比較値を返す.もちろん、aとbが1つのオブジェクトを指す場合、デフォルトは等しい.
requireNonNull
入力したポインタがnullであるかどうかを確認します.
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;
}

リロードメソッドは、以前のtoStringのリロードメソッドに相当し、今回のデフォルト文字列は例外を放出するために使用されます.
isNullとnonNull
双子の兄弟、説明しません.
public static boolean isNull(Object obj) {
        return obj == null;
    }

public static boolean nonNull(Object obj) {
        return obj != null;
    }

requireNonNullシリーズ
public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {
    if (obj == null)
        throw new NullPointerException(messageSupplier == null ?
                                       null : messageSupplier.get());
    return obj;
}

public static <T> T requireNonNullElse(T obj, T defaultObj) {
    return (obj != null) ? obj : requireNonNull(defaultObj, "defaultObj");
}

public static <T> T requireNonNullElseGet(T obj, Supplier<? extends T> supplier) {
    return (obj != null) ? obj : requireNonNull(requireNonNull(supplier, "supplier").get(), "supplier.get()");
}

ここで、ソースコードに出てくる順番を少し変えてみました.requireNonNullはnullかどうかをチェックするフィルタに相当し、nullの場合は異常を放出し、逆に元のオブジェクトに戻ります.requireNonNullElseは前のメソッドをアップグレードし、現在のオブジェクトがnullである場合はdefaultObjに代わって、このオブジェクトが空であるかどうかを確認します.3つ目はネストを2回繰り返します.
Index関連
@ForceInline
public static int checkIndex(int index, int length) {
    return Preconditions.checkIndex(index, length, null);
}

    public static int checkFromToIndex(int fromIndex, int toIndex, int length) {
    return Preconditions.checkFromToIndex(fromIndex, toIndex, length, null);
}

    public static int checkFromIndexSize(int fromIndex, int size, int length) {
    return Preconditions.checkFromIndexSize(fromIndex, size, length, null);
}

主に配列アクセスの限界が発生したかどうかを確認します.