Objects.requireNonNull(T obj) 而不是空检查并手动抛出 IllegalArgumentException?
Objects.requireNonNull(T obj) instead of null checks and manually thrown IllegalArgumentException?
每当我必须检查方法的给定参数是否不为空时,我都会编写空检查并在空检查失败时抛出 IllegalArgumentException
:
if (user == null) {
throw new IllegalArgumentException("User can't be null.");
}
但是通过阅读源码有些Java8类如ArrayList
, I found out that Oracle are using Objects.requireNonNull
to check a parameter against a null value, and then, if the test fails, a NullPointerException
是抛出
这样,前面的代码片段采用这种方法应该是这样的:
Objects.requireNonNull(user, "User can't be null.");
更小,更易读。
假设我可以控制系统的整个异常处理,(即使我不应该,有时处理这些未经检查的异常也是业务的一部分),我是否应该更换我的IllegalArgumentException
与 NullPointerException
并使用 Objects.requireNonNull
而不是编写我自己的空检查和异常抛出?
讨论了当方法接收到它不期望的空值时应该抛出哪种异常。有人主张NullPointerException
,有人主张IllegalArgumentException
。 JDK 方法似乎是在这种情况下抛出 NullPointerException
,这就是 Objects.requireNonNull
抛出它的原因。
但我不会仅仅因为这种方法而修改现有代码,尽管您可能想考虑在新代码中使用 Objects.requireNonNull
。 (与检查 null 并手动抛出异常相比,使用它通常会使代码更具可读性。)
使用Objects.requireNonNull(c)
是检查元素是否不为空的一种非常优雅的方法。但是有一个有趣的讨论是选择 NullPointerException
还是 IllegalArgumentException
--> IllegalArgumentException or NullPointerException for a null parameter?。所以抛出 NullPointerException
是 java 表示引用为空的方式。
否则,您可以制作自己的方法requireNotNull()
。很简单:
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
并且您可以通过 IllegalArgumentException
更改例外 NullPointerException
。
每当我必须检查方法的给定参数是否不为空时,我都会编写空检查并在空检查失败时抛出 IllegalArgumentException
:
if (user == null) {
throw new IllegalArgumentException("User can't be null.");
}
但是通过阅读源码有些Java8类如ArrayList
, I found out that Oracle are using Objects.requireNonNull
to check a parameter against a null value, and then, if the test fails, a NullPointerException
是抛出
这样,前面的代码片段采用这种方法应该是这样的:
Objects.requireNonNull(user, "User can't be null.");
更小,更易读。
假设我可以控制系统的整个异常处理,(即使我不应该,有时处理这些未经检查的异常也是业务的一部分),我是否应该更换我的IllegalArgumentException
与 NullPointerException
并使用 Objects.requireNonNull
而不是编写我自己的空检查和异常抛出?
讨论了当方法接收到它不期望的空值时应该抛出哪种异常。有人主张NullPointerException
,有人主张IllegalArgumentException
。 JDK 方法似乎是在这种情况下抛出 NullPointerException
,这就是 Objects.requireNonNull
抛出它的原因。
但我不会仅仅因为这种方法而修改现有代码,尽管您可能想考虑在新代码中使用 Objects.requireNonNull
。 (与检查 null 并手动抛出异常相比,使用它通常会使代码更具可读性。)
使用Objects.requireNonNull(c)
是检查元素是否不为空的一种非常优雅的方法。但是有一个有趣的讨论是选择 NullPointerException
还是 IllegalArgumentException
--> IllegalArgumentException or NullPointerException for a null parameter?。所以抛出 NullPointerException
是 java 表示引用为空的方式。
否则,您可以制作自己的方法requireNotNull()
。很简单:
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
并且您可以通过 IllegalArgumentException
更改例外 NullPointerException
。