对于待测试类
TestClass
package nullobjectabout;
public class TestClass{
public Object getInfo() {
System.out.println("不是空的哦");
return null;
}
}
1. 传统的判空方法
CustomGetObject
package nullobjectabout;
public class CustomGetObject {
//普通方法
public static void getInfo(TestClass testClass) {
System.out.println("普通方法:");
if (null != testClass) {
testClass.getInfo();
} else {
System.out.println("空的哦");
}
}
}
2. 使用lambda表达式
LamdaGetObject
package nullobjectabout;
import java.util.Optional;
public class LamdaGetObject {
//lambda方法
public static void getInfo(TestClass testClass) {
//filter,map,flatMap,这几个操作跟Stream的处理类似,只是要注意flatMap处理必须手动指定返回类型为Optional
//flatMap不会多层包装,map返回会再次包装Optional;
System.out.println("lambda方法1");
Object obj1 = Optional.ofNullable(testClass)
.flatMap(t -> Optional.ofNullable(t.getInfo()))
.orElse("空的哦");
System.out.println("lambda方法2");
Object obj2 = Optional.ofNullable(testClass)
.map(TestClass::getInfo)
.orElse("空的哦");
}
}
3. 使用Null-Object表达式
参考:https://mp.weixin.qq.com/s/U8IOASjBb6jg358xPoCIqQ
Nullable
package nullobjectabout;
public interface Nullable {
boolean isNull();
}
TestClassBase
package nullobjectabout;
public interface TestClassBase extends Nullable {
Object getInfo();
}
NullTestClass
package nullobjectabout;
public class NullTestClass implements TestClassBase {
public Object getInfo() {
System.out.println("空的哦");
return null;
}
@Override
public boolean isNull() {
return false;
}
}
TestClass
package nullobjectabout;
public class TestClass implements TestClassBase {
@Override
public Object getInfo() {
System.out.println("不是空的哦");
return null;
}
@Override
public boolean isNull() {
return true;
}
}
ObjectFactory
package nullobjectabout;
public class ObjectFactory {
static public TestClassBase getObject(TestClassBase iTestClass){
System.out.println("NullObject方法:");
if(iTestClass == null){
return new NullTestClass();
}
return iTestClass;
}
}
4. 对所有场景进行测试
NullObjectTest
package nullobjectabout;
public class NullObjectTest {
public static void main(String[] args) {
// 测试场景1 :当不是空值的时候
System.out.println("场景1 : 当不是空值的时候");
//空值处理1 普通 处理方式
TestClass notNullClass = new TestClass();
CustomGetObject.getInfo(notNullClass);
//空值处理2 lambda 处理方式
LamdaGetObject.getInfo(notNullClass);
//空值处理3 NullObject模式
ObjectFactory.getObject(new TestClass()).getInfo();
// 测试场景2 :当是空值的时候
System.out.println("场景2 : 当是空值的时候");
//空值处理1 普通 处理方式
TestClass nullClass = null;
CustomGetObject.getInfo(nullClass);
//空值处理2 lambda 处理方式
LamdaGetObject.getInfo(nullClass);
//空值处理3 NullObject模式
ObjectFactory.getObject(null).getInfo();
}
}