云鼎彩票3878,六个月宝宝不爱吃奶,胡惊涛的儿子
今天和大家一起使用java8中的optional api解决nullpointexception,
先来看一段代码:
public class car { private insurance insurance; public insurance getinsurance() { return insurance; } } public class insurance { private string name; public string getname() { return name; } } public class person { private car car; public car getcar() { return car; } } public string getcarinsurancename(person p){ return p.getcar().getinsurance().getname(); }
这个getcarinsurancename()方法一看就知道可能有nullpointexception
通常我们这样处理:
public string getcarinsurancename(person p){ if(p!=null){ car car = p.getcar(); if(car!=null){ insurane insurance = car.getinsurance(); if(insurance!=null){ return insurance.getname(); } } } return "unknow"; }
public class person { private optional car; public optional getcar() { return car; } } public class car { private optional insurance; public optional getinsurance() { return insurance; } } public class insurance { private string name; public string getname() { return name; } } public string getcarinsurancename(optionalperson) { return person.flatmap(person::getcar) .flatmap(car::getinsurance) .map(insurance::getname) .orelse("unknown"); }
一脸懵逼有没有?好的大王,不管你有没有被征服,反正我是被臣妾是要开始
娓娓道来了。
上面的getcarinsurancename方法的几个关键点:
1:使用lambda表达式(不会的请恶补上篇文章)
2:使用java.util.optional对person类中的car类和car类中的insurance类包装
3:使用java.util.optional 中流式api处理数据(类似rxjava或者java.util.steam)
偷偷的把optional类实例方法截了图
1:空值optional
optional
2:非空值optional,传空抛异常
optional
3:可接受null的optional
optional
optional
optional
optional
optional
optional<>
optional optcar.ifpresent(car::getinsurance); boolean = optcar.ispresent; string name = optcar.map(insurance::getname) .orelse("unknown"); 好了,通过上面的这些例子可以帮助我们更优雅的处理nullpointexception,祝福各位撸的愉快ifpresent:如果值存在就会执行回调,否则什么也不干
ispresent:值存在返回true,否则false
orelse:有值则返回,否则返回一个默认值
andthen,再来个filter的例子
@requiresapi(api = build.version_codes.n)
public static void main(string[] args) {
properties properties = new properties();
properties.setproperty("a", "5");
properties.setproperty("b", "-1");
properties.setproperty("c", "true");
system.out.println(readduration(properties,"a"));
system.out.println(readduration(properties,"b"));
system.out.println(readduration(properties,"c"));
optionalint.of(1).
}
@requiresapi(api = build.version_codes.n)
public static int readduration(properties properties, string name) {
return optional.ofnullable(properties.getproperty(name))
.flatmap(s -> parsestring(s))
.filter(i -> i > 10)
.orelse(0);
}
@requiresapi(api = build.version_codes.n)
public static optional parsestring(string s) {
optional optionalint;
try {
optionalint = optional.of(integer.parseint(s));
} catch (numberformatexception e) {
optionalint = optional.empty();
}
return optionalint;
}
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio 解决logcat无过滤工具栏的操作
Android Studio 恢复小窗口停靠模式(Docked Mode)
Android studio保存logcat日志到本地的操作
Android Studio快捷键生成TAG、Log.x日志输出介绍
网友评论