Java学习笔记21

来源:互联网 发布:算法工程师职业规划 编辑:程序博客网 时间:2024/06/14 20:45

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>() {@Overridepublic 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   情绪控_ 

0 0
原创粉丝点击