Java学习笔记21
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 情绪控_
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。