如何优雅的解决java.lang.NullPointerException 空指针的问题

本文介绍了如何使用Java 8的Optional类来优雅地解决常见的NullPointerException问题。通过对比传统的空指针检查方式,详细解析了Optional.ofNullable()和orElse()方法的工作原理,以及它们如何避免空指针异常。此外,还提及了Optional类的其他实用方法,如orElseGet()、isPresent()等,鼓励读者进一步探索Optional的用法。
摘要由CSDN通过智能技术生成

背景

每次拿到对象在进行相关方法或属性的时候都要进行如下操作

先判断是否为null
if(obj!=null){
    //todo.......
}else{
 	 //todo
}

这样的代码,既繁琐,又影响阅读性,而且一不小心就会报如下错误信息

D:\Java\jdk1.8.0_202\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2018.3.5\lib\idea_rt.jar=55047:C:\Program Files\JetBrains\IntelliJ IDEA 2018.3.5\bin" -Dfile.encoding=UTF-8 -classpath D:\Java\jdk1.8.0_202\jre\lib\charsets.jar;D:\Java\jdk1.8.0_202\jre\lib\deploy.jar;D:\Java\jdk1.8.0_202\jre\lib\ext\access-bridge-64.jar;D:\Java\jdk1.8.0_202\jre\lib\ext\cldrdata.jar;D:\Java\jdk1.8.0_202\jre\lib\ext\dnsns.jar;D:\Java\jdk1.8.0_202\jre\lib\ext\jaccess.jar;D:\Java\jdk1.8.0_202\jre\lib\ext\jfxrt.jar;D:\Java\jdk1.8.0_202\jre\lib\ext\localedata.jar;D:\Java\jdk1.8.0_202\jre\lib\ext\nashorn.jar;D:\Java\jdk1.8.0_202\jre\lib\ext\sunec.jar;D:\Java\jdk1.8.0_202\jre\lib\ext\sunjce_provider.jar;D:\Java\jdk1.8.0_202\jre\lib\ext\sunmscapi.jar;D:\Java\jdk1.8.0_202\jre\lib\ext\sunpkcs11.jar;D:\Java\jdk1.8.0_202\jre\lib\ext\zipfs.jar;D:\Java\jdk1.8.0_202\jre\lib\javaws.jar;D:\Java\jdk1.8.0_202\jre\lib\jce.jar;D:\Java\jdk1.8.0_202\jre\lib\jfr.jar;D:\Java\jdk1.8.0_202\jre\lib\jfxswt.jar;D:\Java\jdk1.8.0_202\jre\lib\jsse.jar;D:\Java\jdk1.8.0_202\jre\lib\management-agent.jar;D:\Java\jdk1.8.0_202\jre\lib\plugin.jar;D:\Java\jdk1.8.0_202\jre\lib\resources.jar;D:\Java\jdk1.8.0_202\jre\lib\rt.jar;D:\nethospital\ProdDev_BackEnd\hospital-service\target\classes;D:\Java\repositories\org\springframework\boot\spring-boot-starter\2.1.3.RELEASE\spring-boot-starter-2.1.3.RELEASE.jar;D:\Java\repositories\org\springframework\boot\spring-boot\2.1.3.RELEASE\spring-boot-2.1.3.RELEASE.jar;D:\Java\repositories\org\springframework\spring-context\5.1.5.RELEASE\spring-context-5.1.5.RELEASE.jar;D:\Java\repositories\org\springframework\boot\spring-boot-autoconfigure\2.1.3.RELEASE\spring-boot-autoconfigure-2.1.3.RELEASE.jar;D:\Java\repositories\org\springframework\boot\spring-boot-starter-logging\2.1.3.RELEASE\spring-boot-starter-logging-2.1.3.RELEASE.jar;D:\Java\repositories\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\Java\repositories\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\Java\repositories\org\apache\logging\log4j\log4j-to-slf4j\2.11.2\log4j-to-slf4j-2.11.2.jar;D:\Java\repositories\org\apache\logging\log4j\log4j-api\2.11.2\log4j-api-2.11.2.jar;D:\Java\repositories\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;D:\Java\repositories\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;D:\Java\repositories\org\springframework\spring-core\5.1.5.RELEASE\spring-core-5.1.5.RELEASE.jar;D:\Java\repositories\org\springframework\spring-jcl\5.1.5.RELEASE\spring-jcl-5.1.5.RELEASE.jar;D:\Java\repositories\org\yaml\snakeyaml\1.23\snakeyaml-1.23.jar;D:\Java\repositories\org\springframework\cloud\spring-cloud-starter-config\2.1.1.RELEASE\spring-cloud-starter-config-2.1.1.RELEASE.jar;D:\Java\repositories\org\springframework\cloud\spring-cloud-starter\2.1.1.RELEASE\spring-cloud-starter-2.1.1.RELEASE.jar;D:\Java\repositories\org\springframework\cloud\spring-cloud-context\2.1.1.RELEASE\spring-cloud-context-2.1.1.RELEASE.jar;D:\Java\repositories\org\springframework\security\spring-security-rsa\1.0.7.RELEASE\spring-security-rsa-1.0.7.RELEASE.jar;D:\Java\repositories\org\bouncycastle\bcpkix-jdk15on\1.60\bcpkix-jdk15on-1.60.jar;D:\Java\repositories\org\bouncycastle\bcprov-jdk15on\1.60\bcprov-jdk15on-1.60.jar;D:\Java\repositories\org\springframework\cloud\spring-cloud-config-client\2.1.1.RELEASE\spring-cloud-config-client-2.1.1.RELEASE.jar;D:\Java\repositories\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;D:\Java\repositories\com\fasterxml\jackson\core\jackson-databind\2.9.8\jackson-databind-2.9.8.jar;D:\Java\repositories\com\fasterxml\jackson\core\jackson-core\2.9.8\jackson-core-2.9.8.jar;D:\Java\repositories\org\springframework\cloud\spring-cloud-starter-netflix-eureka-client\2.1.1.RELEASE\spring-cloud-starter-netflix-eureka-client-2.1.1.RELEASE.jar;D:\Java\repositories\org\springframework\cloud\spring-cloud-netflix-hystrix\2.1.1.RELEASE\spring-cloud-netflix-hystrix-2.1.1.RELEASE.jar;D:\Java\repositories\org\springframework\boot\spring-boot-starter-aop\2.1.3.RELEASE\spring-boot-starter-aop-2.1.3.RELEASE.jar;D:\Java\repositories\org\springframework\cloud\spring-cloud-netflix-eureka-client\2.1.1.RELEASE\spring-cloud-netflix-eureka-client-2.1.1.RELEASE.jar;D:\Java\repositories\com\netflix\eureka\eureka-client\1.9.8\eureka-client-1.9.8.jar;D:\Java\repositories\org\codehaus\jettison\jettison\1.3.7\jettison-1.3.7.jar;D:\Java\repositories\stax\stax-api\1.0.1\stax-api-1.0.1.jar;D:\Java\repositories\com\netflix\netflix-commons\netflix-eventbus\0.3.0\netflix-eventbus-0.3.0.jar;D:\Java\repositories\com\netflix\netflix-commons\netflix-infix\0.3.0\netflix-infix-0.3.0.jar;D:\Java\repositories\commons-jxpath\commons-jxpath\1.3\commons-jxpath-1.3.jar;D:\Java\repositories\joda-time\joda-time\2.10.1\joda-time-2.10.1.jar;D:\Java\repositories\org\antlr\antlr-runtime\3.4\antlr-runtime-3.4.jar;D:\Java\repositories\org\antlr\stringtemplate\3.2.1\stringtemplate-3.2.1.jar;D:\Java\repositories\antlr\antlr\2.7.7\antlr-2.7.7.jar;D:\Java\repositories\com\google\code\gson\gson\2.8.5\gson-2.8.5.jar;D:\Java\repositories\org\apache\commons\commons-math\2.2\commons-math-2.2.jar;D:\Java\repositories\com\netflix\archaius\archaius-core\0.7.6\archaius-core-0.7.6.jar;D:
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值