精华内容
下载资源
问答
  • Object.requireNonNull

    2021-01-31 15:26:15
    Object.requireNonNullObject.requireNonNull介绍java8中的优化写法Object.requireNonNull源码 Object.requireNonNull介绍 Object.requireNonNull是用于参数有效性检查的API。 使用Object.requireNonNull方法的好处...

    Object.requireNonNull介绍

    Object.requireNonNull是用于参数有效性检查的API。
    使用Object.requireNonNull方法的好处在于可以显式的指定在哪里抛出异常。
    举个栗子

    public class Foo {
    	private List<Bar> bars;
    	public Foo(List<Bar> bars) {
    		// 在此对入参进行校验
        	Objects.requireNonNull(bars, "bars must not be null");
    	    this.bars = bars;
    	}
    }
    public class Bar{
    	private String name;
        public String getName() {
        	return name;
        }
    }
    

    用new创建出来的Foo对象可以确保bar不是null。
    加入不使用该API:试想一下不小心传了一个null给bars。等你在其他地方调用这个Foo对象里的方法的时候抛出了null pointer的异常,JVM只会告诉你这个语句出了空指针异常:
    bars.get(0).getName().contains(“xxxx”)
    但是并不知道是bars为null,还是bars.get(0)为null,还是bars.get(0).getName()为null。
    在构造方法里面使用Objects.requireNonNull能让我们尽早知道错误,从而达到fail-fast的设计目的。

    java8中的优化写法

    public Foo(Bar bar) {
         this.bar = Optional.of(bar).get();
         // or
         this.bar = Optional.of(s).orElseThrow(() -> new NullPointerException("bar cannot be null"));
    }
     
    

    参考文章一

    Object.requireNonNull源码

    源代码:

    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;
    }
    
    展开全文
  • Why should one use Objects.requireNonNull() ?I have noted that many Java 8 methods in Oracle JDK use Objects.requireNonNull(), which internally throws NullPointerException if the given object (argumen...

    Why should one use Objects.requireNonNull() ?

    I have noted that many Java 8 methods in Oracle JDK use Objects.requireNonNull(), which internally throws NullPointerException if the given object (argument) is null.

    public static T requireNonNull(T obj) {

    if (obj == null)

    throw new NullPointerException();

    return obj;

    }

    But NullPointerException will be thrown anyway if a null object is dereferenced. So, why should one do this extra null check and throw

    NullPointerException?

    One obvious answer (or benefit) is that it makes code more readable and I agree. I'm keen to know any other reasons for using

    Objects.requireNonNull() in the beginning of the method.

    解决方案

    Because you can make things explicit by doing so. Like:

    public class Foo {

    private final Bar bar;

    public Foo(Bar bar) {

    Objects.requireNonNull(bar, "bar must not be null");

    this.bar = bar;

    }

    Or shorter:

    this.bar = Objects.requireNonNull(bar, "bar must not be null");

    Now you know:

    when a Foo object was successfully created using new()

    then its bar field is guaranteed be non-null.

    Compare that to: you create a Foo object today, and tomorrow you invoke a method that uses that field and throws. Most likely, you will not know tomorrow why that reference was null yesterday when it got passed to the constructor!

    In other words: by explicitly using this method to check incoming references you can control the point in time when the exception will be thrown. And most of the time, you want to fail as fast as possible!

    The major advantages are:

    as said, controlled behavior

    easier debugging - because you throw up in the context of the object creation. At a point in time where you have a certain chance that your logs/traces tell you what went wrong!

    and as shown above: the true power of this idea unfolds in conjunction with final fields. Because now any other code in your class can safely assume that bar isn't null - and thus you do not need any if (bar == null) checks in other places!

    展开全文
  • Java Objects.requireNonNull

    2020-11-21 14:28:11
    在学习java动态代理,看到Proxy类中Objects.requireNonNull(T)及Objects.requireNonNull(T obj, String message)来判断传入方法的参数是否为null并抛出异常信息 例如: public void doSomething(String ...

    在学习java动态代理,看到Proxy类中Objects.requireNonNull(T)Objects.requireNonNull(T obj, String message)来判断传入方法的参数是否为null并抛出异常信息

    例如:

    public void doSomething(String customerName, Integer age) {
        Objects.requireNonNull(customerName, "customerName cannot be null");
        Objects.requireNonNull(age, "age cannot be null");
        ...
    }

    但这和使用if(obj==null)判断是否为null的有什么差别呢

    其实javaAPI文件就有说明了,主要就是用来验证方法输入参数是否为null,例如之前通常写法如下:

    public Foo(Bar bar) {
        if(bar == null) {
            throw new NullPointerException();
        } else {
            this.bar = bar;
        }
    }

    有这个方法泽可以写为:

    public Foo(Bar bar) {
        this.bar = Objects.requireNonNull(bar);
    }

    一旦传入的参数为null,会抛出NullPointerException

    Objects.requireNonNull(T)Objects.requireNonNull(T obj, String message)是Java 7才加入的工具类,源码如下:

    public static  T requireNonNull(T obj) {
        if (obj == null)
            throw new NullPointerException();
        return obj;
    }
    
    public static  T requireNonNull(T obj, String message) {
        if (obj == null)
            throw new NullPointerException(message);
        return obj;
    }

    若传入的参数不为null,则返回原参数,因此可确保传入的参数不为null

    简言之就是不需要每次都要自己用if()判断传入参数是否为null了,

    好处是可读性佳,从名称就可以清楚知道的接收得参数应为null,且可直接给定错误信息。搭配写在方法的开头位置,可链到fail-fast的设计目的

     

    而java 8 可以用Optional.of(T val)替代,例如:

    public Foo(Bar bar) {
         this.bar = Optional.of(bar).get();
         // or
         this.bar = Optional.of(s).orElseThrow(() -> new NullPointerException("bar cannot be null"));
    }

     

    展开全文
  • Objects.requireNonNull方法说明

    万次阅读 2017-07-20 09:22:13
     今天看源码的时候看见下面的方法,虽然猜到它的含义,但毕竟...Objects.requireNonNull(h); import java.util.Objects类里下面详细实现:  public static T requireNonNull(T obj) {  if (obj == null)
    

    今天看源码的时候看见下面的方法,虽然猜到它的含义,但毕竟是第一次见,

    本着对技术的好奇,还是进去看了具体实现。

    Objects.requireNonNull(h);


    import java.util.Objects类里下面详细实现:

        public static <T> T requireNonNull(T obj) {
            if (obj == null)
                throw new NullPointerException();
            return obj;
        }


    这样,下次再遇到要判断对象是否为空,空的时候报空指针异常的时候就可以使用这个方法。

    展开全文
  • Objects.requireNonNull()说明

    千次阅读 2019-07-24 19:26:05
    今天看ArrayList源码时偶然看到了Objects.requireNonNull()这个方法,有点好奇就看了一下,下面是这个方法的源码: public static <T> T requireNonNull(T obj) { if (obj == null) throw new ...
  • Object.requireNonNull源码: /** * Checks that the specified object reference is not {@code null}. This * method is designed primarily for doing parameter validation in methods * and constructors, ...
  • requireNonNull(T obj): 作用:查看指定引用对象是不是null 源码: public static <T> requireNonNull(T obj){ if(obj == null) throw new NullPointerException(); return obj; } public static void ...
  • 为什么要使Object.requireNonNull方法Object.requireNonNull新的改变 Object.requireNonNull public class Foo { private final Bar bar; public Foo(Bar bar) { Objects.requireNonNull(bar, "bar must not be ...
  • Objects.requireNonNull( )方法说明

    千次阅读 2019-02-26 09:47:33
    有时候,我们为了使得对象不为空,可以使用Objects.requireNonNull( )方法对对象进行判断。 2.源代码 /* @param obj 需要检测是否为空的对象 * @param &lt;T&gt; 对象类型 * @return 对象不为空则返回该...
  • Objects.requireNonNull(obj, message)是java7新增的特性,用于替代手工null值检查。 具体实现如下: public static <T> T requireNonNull(T obj, String message) { if (obj == null) throw new ...
  • Android中Object.requireNonNull和@NonNull Android中的Object.requireNonNull和@NonNull并不能解决报错的问题,相反,是为了更快速的抛出问题、定位问题。 问题1: 不加上Object.requireNonNull也会抛出异常,为什么...
  • 使用Objects.requireNonNull(d)方法,若d为null,则会抛出空指针异常-Exception in thread "main" java.lang.NullPointerException,会中断程序的运行。则仍需要外城方法捕捉异常。代码如下: try { Objects....
  • Objects.requireNonNull()

    2018-06-07 14:11:55
    Objects.requireNonNull(holder).itemView.setTag(dataBean); 源码 /** * Checks that the specified object reference is not {@code null}. This * method is designed primarily for doing parameter ...
  • object的静态方法 对参数做合法性判断 源码 public static <... T requireNonNull(T obj){ if(obj == null) throw new NullPointerException(); return obj; 例子1 public class Demo04Objects { ...
  • package ... import java.util.Objects; /* Obects类中的静态方法 public static <T> T requireNonNull(T obj):查看指定引用对象不是null。 源码: public static <T> T requireNonN...
  • 理解一下 Java 的 Objects.requireNonNull(),参考 这里,截图如下,这种处理叫做 fail fast,其实就是方便了使用者,否则,使用者需要自己去进行入参保护。 这个时候想起了两个小插曲: 当年去华为面试,算法其实...
  • Objects.requireNonNull() 如果当前对象为空 会抛出一个空指针异常 否则就会返回当前对象 。 常用于非空校验, 越早校验,越早发现
  • import java.util.Objects;...public static T requireNonNull(T obj):查看指定引用对象不是null。 源码: public static T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return...
  • T requireNonNull(T obj):查看指定地下是不是null 源码: public static <T> T requiredNonNull(T obj){ if(obj == null) throw new NullPointerException(); return obj; } eg1: publi...
  • 异常处理之Objects.requireNonNull( )方法说明 1. 使用场景 判断对象为不为空,可以使用Objects.requireNonNull( )方法对对象进行判断。 2.源码 /* @param obj 需要检测是否为空的对象 * @param <T> 对象...
  • Objects.requireNonNull(T obj)方法记录

    千次阅读 2018-12-07 13:59:25
    判断一个对象为空抛出NullPointer异常的方法  实现: public static &... T requireNonNull(T obj) {  if (obj == null)  throw new NullPointerException();  return obj; }    ...
  • package Day04ExceptionDemo;...public class Demo02RequireNonNull { public static void main(String[] args) { Object obj = null; Demo01(obj); } private static void Demo01(Object obj) { /*if (obj ==
  • public static T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; } public class Demo03Objects { public static void main(String[] args) { method(null); } ...
  • 如何优雅的使用Objects.requireNonNull(T obj, String message)定制你的NPE异常
  • 题主先不下结论,给出一些例证,每个看官自己体会有没有加的必要,先贴出requireNonNull这个方法。 public static <T> T RunTime(T obj) { if (obj == null) throw new NullPointerException(); return ...
  • 异常、requireNonNull

    2019-04-14 18:23:10
    public static <T> T requireNonNull(T obj):查看指定引用对象不是null。 源码: public static <T> T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; } */ ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,884
精华内容 7,553
关键字:

requirenonnull