又到了阿超说博客时间
今日给小伙伴们带来的是如何用Optional这个类
近日,国外一小哥因为不写注释和括号换行,以及用git经常覆盖掉同事的代码被揍
在这里阿超也顺便提醒一下大家:代码不规范,同事两行泪
那么进入今天的正题吧~今天带来的是1.8的这个类Optional,Optional在英文中是可选的意思,他在java中可以作为非空判断,是妥妥的炫技哦!
首先是进行字符串的长度取值
1 2 3 4 5 6 7 8 9 10 11 12
|
Integer strLength(String str) { if (str == null) { return 0; } return str.length(); }
|
相信有不少小伙伴看出来了,这段代码是大家经常写的,这种逻辑代码,传入的字符串为空,如果调用它的方法,会报NullPointerException
所以我们给她加了个非空判断
现在展示新写法:
1 2 3 4 5 6 7 8 9 10
|
Integer strLengthPlus(String str) { return Optional.ofNullable(str).map(String::length).orElse(0); }
|
一行代码,搞定上面的逻辑,看起来高端大气上档次(虽然jdk说Optional可具有不可预测的结果,应当避免),但这不是很帅气嘛!
接下来就是重头戏了,我们先创建一个实体类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| package pojo;
import java.io.Serializable; import java.util.Optional;
public class ProgramMonkey { private Boolean hasHair; private Optional<String> name;
public Boolean getHasHair() { return hasHair; }
public void setHasHair(Boolean hasHair) { this.hasHair = hasHair; }
public Optional<String> getName() { return name; }
public void setName(Optional<String> name) { this.name = name; } }
|
它有两个属性,一个是Boolean类型的hasHair,一个是Optional< String>类型的name
下面是重点!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
void nullClass(String str) { Optional<String> optStr = Optional.empty(); Optional<String> optStrNotNull = Optional.of(str); Optional<String> optStrNull = Optional.ofNullable(str); ProgramMonkey programMonkey = new ProgramMonkey(); Boolean hasHair = Optional.ofNullable(programMonkey).map(ProgramMonkey::getHasHair).orElse(false); Optional<ProgramMonkey> programMonkeyOptional = null; String programMonkeyName = programMonkeyOptional.map(ProgramMonkey::getName).map(Optional::get).orElse("程序猿不配拥有姓名"); String programMonkeyChildhoodName = programMonkeyOptional.flatMap(ProgramMonkey::getName).orElse("程序猿不配拥有姓名"); }
|
好了,这就是本期阿超说博客的全部内容了,谢谢大家的收看!我们下次再见~