package NullObject;
import java.util.Optional;
public class Test {
public static void main(String[] args) {
//空值处理1 NullObject模式
Factory.get(new Depedency()).operation();
//空值处理2 java8 处理方式
new Test().test2(new Test4());
}
//普通处理方式
private void test(Test4 test4) {
if (test4 != null) {
test4.getTest3();
if (test4.getTest3() != null) {
test4.getTest3().getTest2();
if (test4.getTest3().getTest2() != null) {
test4.getTest3().getTest2().getInfo();
}
}
}
}
//java8实现方式
private void test2(Test4 test4) {
//filter,map,flatMap,这几个操作跟Stream的处理类似,只是要注意flatMap处理必须手动指定返回类型为Optional
//但是flatMap要求Test3::getTest2返回值为Optional类型,而map不需要,
//flatMap不会多层包装,map返回会再次包装Optional;
Object obj = Optional.ofNullable(test4)
.flatMap(t -> Optional.ofNullable(t.getTest3()))
.flatMap(t -> Optional.ofNullable(t.getTest2()))
.map(Test2::getInfo)
.orElse("空值");
Object o = Optional.ofNullable(test4)
.map(Test4::getTest3)
.map(Test3::getTest2)
.map(Test2::getInfo)
.orElse("空值");
System.out.println(obj);
System.out.println(o);
}
}
class Test2 {
public String getInfo() {
System.out.println("数据获取成功");
return null;
}
}
class Test3 {
public Test2 getTest2() {
System.out.println("Test3 获取 Test2");
return new Test2();
}
}
class Test4 {
public Test3 getTest3() {
System.out.println("Test4 获取 test3");
return null;
}
}
//工厂模式处理NullPointException
//Nullable是空对象的相关操作接口,用于确定对象是否为空,因为在空对象模式中,
// 对象为空会被包装成一个Object,成为NullObject,该对象会对原有对象的所有方法进行空实现
interface Nullable {
boolean isNull();
}
interface DepedencyBase extends Nullable {
void operation();
}
class NullObject implements DepedencyBase {
@Override
public boolean isNull() {
return false;
}
@Override
public void operation() {
System.out.println("do nothing");
}
}
class Depedency implements DepedencyBase {
@Override
public boolean isNull() {
return true;
}
@Override
public void operation() {
System.out.println("operation");
}
}
class Factory {
public static DepedencyBase get(DepedencyBase depedencyBase) {
if (depedencyBase == null) {
return new NullObject();
}
return depedencyBase;
}
}
在 Java 中如何优雅地判空
最新推荐文章于 2024-08-15 11:13:20 发布