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   情绪控_ 

©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:上身试试 返回首页