使用2行代码,还是使用10行代码?
有时候想要拿到param.expression。但是,前面一个为空了,导致了空指针异常!然后就一堆的if判断似乎逻辑挺好,优化判断方式似乎简洁一些。可否有更简单方式呢?
/**
* @description:
* @author: Lucky
* @create: 2022-06-29 8:50
**/
public class TestMain {
private DataJsonDto json;
//执行方法前
@Before
public void setUp() throws Exception {
json = null;
}
/**
* 青铜版,使用5行代码
*/
@Test
public void handlerNullPointerException1() throws Exception {
if (json != null) {
Parameter param = json.getParameter();
if (param != null) {
if (param.getExpression() != null) {
String expression = param.getExpression();
// TODO 执行业务
System.out.println("想要expression值:" + expression);
}
}
}
}
/**
* 白银版,使用11行代码
*/
@Test
public void handlerNullPointerException2() throws Exception {
if (json == null) {
return;
}
Parameter param = json.getParameter();
if (param == null) {
return;
}
if (param.getExpression() == null) {
return;
}
String expression = param.getExpression();
// TODO 执行业务
System.out.println("想要expression值:" + expression);
}
/**
* 黄金版,使用2行代码
*/
@Test
public void handlerNullPointerException3() throws Exception {
Parameter param = Optional.ofNullable(json).map(u -> u.getParameter()).orElse(new Parameter());
String expression = Optional.ofNullable(param).map(u -> u.getExpression()).orElse(null);
// TODO 执行业务
System.out.println("想要expression值:" + expression);
}
/**
* 铂金版,使用1行代码
* Optional.ofNullable(json).map(u -> u.getParameter()).map(a -> a.getExpression()).orElseThrow(() -> new Exception("取指错误"));
*/
@Test
public void handlerNullPointerException4() throws Exception {
String expression = Optional.ofNullable(json).map(u -> u.getParameter()).map(a -> a.getExpression()).orElse(null);
// TODO 执行业务
System.out.println("想要expression值:" + expression);
}
}
采用链式编程,虽然代码优雅了。但是,逻辑性不明显,同时可读性也有所降低。
依照心情,酌情使用