重庆网站推广产品企业,宁波象山网站建设,做网站能挣多少钱,免费的网站模板哪里有引言 Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true#xff0c;调用get()方法会返回该对象。 Optional 是个容器#xff1a;它可以保存类型T的值#xff0c;或者仅仅保存null。Optional提供很多有用的方法#xff0c;这样我们就不用显式进…引言 Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true调用get()方法会返回该对象。 Optional 是个容器它可以保存类型T的值或者仅仅保存null。Optional提供很多有用的方法这样我们就不用显式进行空值检测。 Optional 类的引入很好的解决空指针异常。 示例代码
/*** Optional使用详解 使用 Optional 时尽量不直接调用 Optional.get() 方法, Optional.isPresent()* 更应该被视为一个私有方法, 应依赖于其他像 Optional.orElse(), Optional.orElseGet(), Optional.map()* 等这样的方法. br* 类名Tbr* 作者 mhtbr* 日期 2018年9月2日-下午10:47:42br*/
public class T {public static void main(String[] args) {/* 1. 三个构造器 */// 它要求传入的 obj 不能是 null 值的, 否则还没开始进入角色就倒在了 NullPointerException 异常上.OptionalUser opt1 Optional.of(new User());// value null ? empty() : of(value);OptionalUser opt2 Optional.ofNullable(null);// 直接返回一个空的Optional对象OptionalUser opt3 Optional.empty();System.out.println(#1 output: opt1 , opt2 , opt3);/* 2. 存在即返回, 无则提供默认值 */// 这种方法可以取代三目运算符的非空判断与默认值赋值。User u opt1.orElse(new User(2, 小明));User u2 opt2.orElse(new User(2, 小明));System.out.println(#2 output: u ; u2);/* 3.存在即返回, 无则由函数来产生 ,和上一个类似 */User u3 opt2.orElseGet(() - {return new User(3, 波多老师);});// 或者写成 User u3 opt2.orElseGet(() - new User(3,波多老师));System.out.println(#3 output: u3);/* 4. 存在就对它做点什么 */opt1.ifPresent(user - System.out.println(#4 output: user.getName()));opt2.ifPresent(user - System.out.println(#4 output: user.getName()));/* 5. map函数 */// map函数判断isPresent() true时执行参数列表中的代码以为返回的是OptionalT所以可以配合orElse和orElseGet一起使用。User qiao new User(100, da-qiao-wei-jiu);String name opt2.map(user - user.getName()).orElseGet(() - qiao.getName());System.out.println(#5 output: name);// 多个map级联OptionalUser teacherOpt Optional.of(new User(19, da-qiao-wei-jiu));String name2 teacherOpt.map(user - user.getName()).map(n - n.toUpperCase()).orElse(sss);System.out.println(#6 output: name2);}
}class User {private Integer score 1;private String name 苍老师;public User() {}public User(Integer score, String name) {this.score score;this.name name;}public Integer getScore() {return score;}public void setScore(Integer score) {this.score score;}public String getName() {return name;}public void setName(String name) {this.name name;}Overridepublic String toString() {return {score : score , name : name };}}
执行结果