ご存知のとおり、これはObject
Javaのルートクラスです。Objects
に非常によく似た名前のクラスを見つけましたObject
。
TheisObjects
クラスはしばらくの間私を混乱させました。Objects
いつどこでクラスを使うべきか教えてもらえますか?
Objects
Object
インスタンスと組み合わせて使用できるユーティリティメソッドのセットが含まれているだけです。インスタンス化することはできず(コンストラクターfinal
はなく)、メソッドのみが含まれていることに注意してください。public
static
ユーティリティメソッドを複数形の名前クラスに配置する命名スキーマは、JDKではかなり一般的です。
Collections
Arrays
(厳密に言えば、対応するArray
クラスはありませんが)他のライブラリもこのスキームを使用します。たとえば、Guava:
クラスの典型的な使用法の1つObjects
:
public void foo(SomeClass bar) {
Objects.requireNonNull(bar, "custom msg"); // // Ensure an object is not null.
}
bar
nullの場合の出力:
Exception in thread "main" java.lang.NullPointerException: custom msg
at java.util.Objects.requireNonNull(Unknown Source)
at com.example.ObjectsUsage.main(ObjectsUsage.java:24)
フィールドからhashCodeを構築するもう1つ:
@Override public int hashCode() {
return Objects.hash(this.foo, this.bar, this.duh);
}
そして最も有用なもの:
if (Objects.equals(sun, moon)) {
log("I swear I am in earth");
}
はい、 ObjectクラスとObjectsクラスの両方に多くの違いがあります
オブジェクトクラス
クラスオブジェクトは、クラス階層のルートです。すべてのクラスにはスーパークラスとしてObjectがあり、このクラスはJDK1.0以降で使用できます。
クラス宣言:public class Object
パッケージ:java.lang.Object
メソッド:clone()、equals(Object obj)、hashCode()、notify()、notifyAll()、toString()、wait()などのインスタンスメソッドのみがあります。
オブジェクトクラス
オブジェクトクラスは最終クラスであり、オブジェクトを操作するための静的ユーティリティメソッドのみで構成されます。オブジェクトクラスメソッドを使用すると、オブジェクトのハッシュコードを計算し、オブジェクトの文字列を返すnullセーフメソッドであるため、NullPointerExceptionをスマートに処理できます。 、および2つのオブジェクトを比較します。このクラスはJDK1.7以降で利用可能です
クラス宣言:public final class Objects extends Object
パッケージ:java.util.Objects
メソッド:equals(Object a、Object b)、hash(Object ... values)、isNull(Object obj)、nonNull(Object obj)、toString(Object o)、hashCode(Object o)などの静的メソッドのみがあります。
注:JDK1.7を使用している場合は、Objectsクラスのみを使用できます。