更新
我为 Java 开发人员创建了一个 Java 库(Maven 依赖项),以从他们的代码中删除这个 NullPointerException Hell。查看我的存储库。
NullUtil 存储库
Java中处理空值的通用方法
<script src="https://gist.github.com/rcvaram/f1a1b89193baa1de39121386d5f865bc.js"></script>
如果该对象不为空,我们将执行以下操作。
一个。我们可以改变对象(I)
湾。我们可以返回一些东西(O)作为输出而不是改变对象(I)
C。我们都可以
在这种情况下,我们需要传递一个函数,该函数需要接受作为我们的对象的输入 param(I) 如果我们这样接受,那么我们可以根据需要改变该对象。而且该功能可能是某物(O)。
如果一个对象为空,那么我们将做以下事情
一个。我们可能会以自定义的方式抛出异常
湾。我们可能会退回一些东西。
在这种情况下,对象为空,因此我们需要提供该值,否则我们可能需要抛出异常。
我举两个例子。
- 如果我想在字符串中执行修剪,那么该字符串不应该为空。在这种情况下,我们必须额外检查 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.
// mutate the object if not null otherwise throw a custom message runtime exception instead of NullPointerException
setNullCheckExecutor(teacher, teacher -> {
teacher.setAge(19);
return null;
}, () -> {
throw new RuntimeException("Teacher is null");
});