更新
NullUtil代码库
Java中处理空值的通用方法
<script src="https://gist.github.com/rcvaram/f1a1b89193baa1de39121386d5f865bc.js"></script>
如果该对象不为null,则我们将执行以下操作:
a. 我们可以修改对象(I)
b. 我们可以返回输出结果(O)而不是修改对象(I)
c. 我们可以同时进行
在这种情况下,我们需要传递一个函数,该函数需要接受输入参数(I),该参数是我们的对象。如果我们以这种方式进行,那么我们可以在需要时更改该对象,该函数也可能返回某些内容(O)。
如果一个对象为null,则我们将执行以下操作
a. 我们可以按自定义方式引发异常
b. 我们可以返回某些内容。
在这种情况下,对象为null,所以我们需要提供值,或者我们可能需要抛出异常。
我举两个例子。
- 如果我想要在字符串中执行trim操作,则该字符串不应为null。在这种情况下,我们必须额外检查null值,否则会出现NullPointerException。
public String trimValue(String s){
return s == null ? null : s.trim();
}
- 如果对象不为空,我希望设置一个新值到该对象中,否则我想抛出运行时异常的另一个函数。
public void setTeacherAge(Teacher teacher, int age){
if (teacher != null){
teacher.setAge(age);
} else{
throw new RuntimeException("teacher is null")
}
}
通过我的解释,我创建了一个通用方法,该方法接受一个值(该值可能为null),一个函数(如果对象不为null则执行)和另一个供应商函数(如果对象为null则执行)。
通用函数
public <I, O> O setNullCheckExecutor(I value, Function<I, O> nonNullExecutor, Supplier<O> nullExecutor) {
return value != null ? nonNullExecutor.apply(value) : nullExecutor.get();
}
有了这个通用函数之后,我们可以按照以下方式来处理示例方法:
1.
//To Trim a value
String trimmedValue = setNullCheckExecutor(value, String::trim, () -> null);
这里,nonNullExecutor函数是对值进行修剪(使用方法引用)。nullExecutorFunction将返回null,因为它是一个身份函数。
2.
setNullCheckExecutor(teacher, teacher -> {
teacher.setAge(19);
return null;
}, () -> {
throw new RuntimeException("Teacher is null");
});
foo
的null
值也是有意义的。如果传递了null
的foo
到您的方法中,则抛出NullPointerException
异常。 - assylias