java.util.Objects类是java7新增的工具类,其中提供了一些可以避免空指针异常的方法。
判断对象为空的方法是:isNull(Object obj);
示例代码如下图所示:
public class ObjectsTest {
public static void main(String[] args) {
// 判断一个对象是否为空
String str = null;
System.out.println("str是否为空:" + Objects.isNull(str));
// 赋值后判断该对象是否为空
str = "hello world";
System.out.println("str是否为空:" + Objects.isNull(str));
}
}
执行结果如下图所示:
判断对象不为空的方法是:nonNull(Object obj);
示例代码如下所示:
public class ObjectsTest {
public static void main(String[] args) {
// 判断一个对象是否为空
String str = null;
System.out.println("str是否不为空:" + Objects.nonNull(str));
// 赋值后判断该对象是否为空
str = "hello world";
System.out.println("str是否不为空:" + Objects.nonNull(str));
}
}
执行结果如下图所示:
要求对象不能为空,为空则抛出异常的方法有多个,分别为:
requireNonNull(T obj):对象为空时,抛出默认的异常。相关的示例代码如下所示:
public class ObjectsTest {
public static void main(String[] args) {
// 对象为空的例子
try {
String str = null;
// 对象为空,抛出异常
String s = Objects.requireNonNull(str);
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("================================");
// 对象不为空的例子
try {
String str2 = "hello world";
String s = Objects.requireNonNull(str2);
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}
}
执行结果如下图所示:
requireNonNull(T obj, String messge): 对象为空时,抛出指定messge信息的异常。相关示例代码如下所示:
public class ObjectsTest {
public static void main(String[] args) {
// 对象为空的例子
try {
String str = null;
// 对象为空,抛出异常
String s = Objects.requireNonNull(str, "该对象为空");
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("================================");
// 对象不为空的例子
try {
String str2 = "hello world";
String s = Objects.requireNonNull(str2, "该对象为空");
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}
}
执行结果如下图所示:
requireNonNull(T obj, Supplier
public class ObjectsTest {
public static void main(String[] args) {
// 对象为空的例子
try {
String str = null;
// 对象为空,抛出异常
String s = Objects.requireNonNull(str, () -> {
System.out.println("执行了生产者对象");
return "该对象不能为空";
});
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("================================");
// 对象不为空的例子
try {
String str2 = "hello world";
String s = Objects.requireNonNull(str2, () -> {
System.out.println("执行了生产者对象");
return "该对象不能为空";
});
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}
}
执行结果如下图所示:
requireNonNullElse(T obj, T defaultObj): 对象为空时,使用传入的默认对象。如果传入的默认对象也为为空,则抛出默认的异常。示例代码如下所示:
public class ObjectsTest {
public static void main(String[] args) {
// 对象为空的例子
try {
String str = null;
// 对象为空,抛出异常
String s = Objects.requireNonNullElse(str, "默认对象");
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("================================");
// 对象不为空的例子
try {
String str2 = "hello world";
String s = Objects.requireNonNullElse(str2, "默认对象");
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}
}
执行结果如下图所示:
requireNonNullElseGet(T obj, Supplier extends T> supplier ): 对象为空时,通过传入的生成者对象来获取一个对象,若获取的对象不为空,则返回该对象。若获取的对象为空,则抛出获取对象为空的异常。示例代码如下所示:
public class ObjectsTest {
public static void main(String[] args) {
// 对象为空的例子
try {
String str = null;
// 对象为空,抛出异常
String s = Objects.requireNonNullElseGet(str, () -> {
System.out.println("执行生产者对象");
return "默认对象";
});
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("================================");
// 对象不为空的例子
try {
String str2 = "hello world";
String s = Objects.requireNonNullElseGet(str2, () -> {
System.out.println("执行生产者对象");
return "默认对象";
});
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}
}
执行结果如下图所示:
判断对象相等的方法为:equals(Object a, Object b) 和 deepEquals(Object a, Object b)两个方法。相对于equals方法来说,deepEquals方法还可以比较两个数组或其他集合是否相等。示例代码如下所示:
public class ObjectsTest {
public static void main(String[] args) {
// 使用Objects.equals(Object a, Object b)判断是否相等
System.out.println("null和null是否相等:" + Objects.equals(null, null));
System.out.println("null和\"hello world\"是否相等:" + Objects.equals(null, "hello world"));
System.out.println("\"tom\"和\"tom\"是否相等:" + Objects.equals("tom", "tom"));
System.out.println("==================================================================");
// 使用Objects.deepEquals(Object a, Object b)判断是否相等
System.out.println("null和null是否相等:" + Objects.deepEquals(null, null));
System.out.println("null和\"hello world\"是否相等:" + Objects.deepEquals(null, "hello world"));
int[] arr1 = {1, 3, 4};
int[] arr2 = {1, 3, 4};
System.out.println("arr1和arr2是否相等:" + Objects.deepEquals(arr1, arr2));
int[] arr3 = {1, 4, 3};
System.out.println("arr1和arr3是否相等:" + Objects.deepEquals(arr1, arr3));
List list = Arrays.asList(1, 2, 3);
System.out.println("arr1和list是否相等:" + Objects.deepEquals(arr1, list));
}
}
执行结果如下图所示:
判断两个对象的大小的方法是:compare(T a, T b, Comparator super T> c)。该方法,需要传入一个比较器。示例代码如下图所示:
public class ObjectsTest {
public static void main(String[] args) {
int result = Objects.compare(12, 14, (a, b) -> a - b == 0? 0 : a - b > 0 ? 1: -1);
System.out.println(result);
}
}
执行结果如下图与所示:
自此,Objects的常用方法就已经介绍完毕。