Objects是Java 7新增的一个工具类,它提供了一些工具方法来操作对象,这些工具方法大多是“空指针”安全的。
Objects实现的方法如下:
requireNonNull(T)与requireNonNull(T,String)在源码中定义如下:
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;
}
在使用上面requireNonNull(T)方法时,当传入的参数不为null时,返回参数本身,反之,抛出一个NullPointerException异
常。而requireNonNull(T,String)方法的作用是,传入的参数不为null时,返回参数本身,否则抛出message的
NullPointerException异常。
接着我们来看看isNull(Object)方法与nonNull(Object)方法在源码中定义如下:
public static boolean isNull(Object obj) {
return obj == null;
}
public static boolean nonNull(Object obj) {
return obj != null;
}
从上面的程序中可以看出isNull(Object)方法是判断传入的对象是否为null,为null返回true,否则false。nonNull(Object
obj)方法恰恰相反,判断传入的对象是否为null,为null返回false,否则返回true。
最后我们看下requireNonNull(T,Supplier<String>)方法:
public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {
if (obj == null)
throw new NullPointerException(messageSupplier.get());
return obj;
}
在这里传入一个Supplier接口实现类的对象,Supplier接口定义如下:
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
因此requireNonNull(T,Supplier<String>)方法与前面介绍的两个requireNonNull方法相似,当传入参数不为null,返回参
数本身,否则引发NullPointerException异常。
看下requireNonNull(T,Supplier<String>)方法如何使用:
class User {
public String name;
public int age;
public User(String name,int age){
this.name=name;
this.age=age;
}
protected String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "name="+name+"\nage="+age;
}
}
public class Main {
public User user1,user2;
public static void main(String[] args) {
new Main().init();
}
public void init(){
User user1 = null;
User message=Objects.requireNonNull(user1, new Supplier<String>() {
@Override
public String get() {
return "user1这个对象为null";
}
});
}
}
输出:
Exception in thread "main" java.lang.NullPointerException: user1这个对象为null
at java.util.Objects.requireNonNull(Objects.java:290)
at code2.Main.init(Main.java:50)
at code2.Main.main(Main.java:45)
很明显以上程序抛出NullPointerException异常,并输出Supplier接口实现的get方法。
转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/43940885 情绪控_