平时开发的工作中,自己组内的很多大佬经常使用可选的用法,自己问他们,这个到底有什么好处呢,他们说可以很好的规避好空指针的问题,我们在平时写java代码的时候,如果是一个新手,肯定很多情况下都会出现空指针的报的错,而java8以后提供的可选的问题,就可以很好地规避我们空指针的问题。
空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,谷歌公司著名的番石榴项目引入了可选类,番石榴通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码。受到谷歌番石榴的启发,可选类已经成8为Java类库的一部分.Optional实际上是个容器:它可以保存类型T的值,或者仅仅保存null.Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
在Java 8之前,程序员将返回零而不是可选的。这种方法有一些缺点。一种是没有明确的方法来表示零可能是一个特殊值。相比之下,在API中返回可选的是明确的声明,其中可能没有值。如果我们要确保不会出现空指针异常,则需要对每个引用进行显式的空检查,如下所示,我们都同意这是很多样板。
//可选之前的生活 私人空间getIsoCode(用户用户){ 如果(用户!=null) { 地址地址=user.getAddress (); 如果(地址!=null) { 国家国家=address.getCountry (); 如果(国家!=null) { 字符串isocode=country.getIsocode (); 如果(isocode !=null) { isocode=isocode.toUpperCase (); } } } } }
为了简化此过程,让我们看一下如何使用可选类,从创建和验证实例到使用它提供的不同方法并将其与返回相同类型的其他方法组合在一起,后者才可选的是厉害之处。
可选类提供了大约10种方法,我们可以使用它们来创建和使用可选类、下面将介绍如何使用它们。
1。Optional.of ()
//参数不能是空
引用>
Optionaloptional1=Optional.of (1);
2。Optional.ofNullable ()
Optional.of()或者Optional.ofNullable():创建可选的对象,差别在于,不允许参数是零,而ofNullable则无限制。
//参数可以是空
Optionaloptional2=Optional.ofNullable (null); //参数可以是非零
引用>
Optionaloptional3=Optional.ofNullable (2),
3。Optional.empty ()
Optional.empty():所有空包装成的可选的对象:
Optional
引用>o1=可选。你们;Integer>空()
Optionalo2=Optional.ofNullable (null)
打印(o1==o2)//真实
1。isPresent()判断值是否存在
Optional
optional1=Optional.ofNullable (1);
Optionaloptional2=Optional.ofNullable (null); //isPresent判断值是否存在
引用>
System.out.println (optional1.isPresent ()==true),
System.out.println (optional2.isPresent ()==false),
2。ifPresent消费者(消费者)
ifPresent消费者(消费者),如果可选的对象保存的值不是null,则调用消费者对象,否则不调用
Optionaloptional1=Optional.ofNullable (1); Optional optional2=Optional.ofNullable(空);//如果不是null,调用消费者 optional1。ifPresent(新的Consumer () { @Override 公共空间接受(整数t) { system . out。println(“价值”+ t); } });//空,不调用消费者 optional2。ifPresent(新的Consumer () { @Override 公共空间接受(整数t) { system . out。println(“价值”+ t); } }); <强> 5。获取可选里面的对象强>
1。get ()
注意:在调用得到()方法之前,一定要先进行isPresent()方法判断是否存在值
//得到 Optionaloptional1=Optional.of (“javaone”); 如果(optional1.isPresent ()) { 字符串值=https://www.yisu.com/zixun/optional1.get (); } 2。orElse(值)
返回值(如果存在);反之,返回其他。
//orElse
Java8可选的原理及用法解析