Java面向对象设计 - Java Objects类
Java在java.util包中有一个实用程序类Objects用于处理对象。
它由所有静态方法组成。 Objects类中的大多数方法都会优雅地处理空值。
以下是类中的方法列表。他们的描述遵循列表。
- int compare(T a, T b, Comparator c)
如果参数相同,则返回0,否则返回c.compare(a,b)。因此,如果两个参数都为null,则返回0。 - boolean deepEquals(Object a, Object b)
检查两个对象是否相等。如果两个参数都相等,则返回true。否则,它返回false。如果两个参数都为null,则返回true。 - boolean equals(Object a, Object b)
比较两个对象是否相等。如果两个参数相等,则返回true。否则,它返回false。如果两个参数都为null,则返回true。 - int hash(Object... values)
为所有指定的对象生成哈希码。它可以用于计算对象的哈希码,该哈希码基于多个实例字段。 - int hashCode(Object o)
返回指定对象的哈希码值。如果参数为null,则返回0。 - boolean isNull(Object obj)
如果指定的对象为null,isNull()方法返回true。否则,它返回false。您还可以使用比较运算符==检查对象是否为null,例如,obj == null返回obj的true为null。 - boolean nonNull(Object obj)
执行与isNull()方法相反的检查。 - T requireNonNull(T obj)
T requireNonNull(T obj, String message)
T requireNonNull(T obj, Supplier messageSupplier)
检查参数是否为null。如果参数为null,它会抛出一个NullPointerException异常。此方法设计用于验证方法和构造函数的参数。
第二个版本可以指定当参数为null时抛出的NullPointerException的消息。
第三个版本的方法将一个Supplier作为第二个参数。 - String toString(Object o)
String toString(Object o, String nullDefault)
如果参数为null,则toString()方法返回一个“null”字符串。对于非空参数,它返回通过调用参数的toString()方法返回的值。
HashCode
下面的代码演示了如何使用来自Objects类的方法来计算哈希码。
import java.util.Objects; public class Main { public static void main(String[] args) { // Compute hash code for two integers, a char, and a string int hash = Objects.hash(10, 800, "\u20b9", "Hello"); System.out.println("Hash Code is " + hash); } }
上面的代码生成以下结果。
equals
以下代码显示了如何使用Objects类中的equals方法来比较两个对象。
import java.util.Objects; public class Main { public static void main(String[] args) { // Test for equality boolean isEqual = Objects.equals(null, null); System.out.println("null is equal to null: " + isEqual); isEqual = Objects.equals(null, "XYZ"); System.out.println("null is equal to XYZ: " + isEqual); } }
上面的代码生成以下结果。
toString
以下代码显示如何使用toString方法从对象将对象转换为字符串。
import java.util.Objects; public class Main { public static void main(String[] args) { // toString() method test System.out.println("toString(null) is " + Objects.toString(null)); System.out.println("toString(null, \"XXX\") is " + Objects.toString(null, "XXX")); } }
上面的代码生成以下结果。
requireNonNull
以下代码显示如何使用Objects类中的requireNonNull。
import java.time.Instant; import java.util.Objects; import java.util.function.Supplier; public class Main { public static void main(String[] args) { try { printName("A"); printName(null); } catch (NullPointerException e) { System.out.println(e.getMessage()); } try { Supplier<String> messageSupplier = () -> "Name is required. Error generated on " + Instant.now(); printNameWithSuplier("asdf", messageSupplier); printNameWithSuplier(null, messageSupplier); } catch (NullPointerException e) { System.out.println(e.getMessage()); } } public static void printName(String name) { Objects.requireNonNull(name, "Name is required."); System.out.println("Name is " + name); } public static void printNameWithSuplier(String name, Supplier<String> messageSupplier) { Objects.requireNonNull(name, messageSupplier); } }
上面的代码生成以下结果。