【后端】Optional.get()‘without ‘isPresent() IDEA报黄系列01

这篇博客探讨了Java8中Optional类的使用,强调了避免使用get()方法直接获取值可能导致的NullPointerException,推荐使用orElse()进行安全的空值处理。通过一个代码示例解释了Optional.get()在Optional实例无值时抛出异常的情况,并提供了优化代码的建议。博客还介绍了Optional的基本概念,包括它的主要方法isPresent()和orElse(),并提醒开发者在调用get()前应先进行判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

心血来潮更新下 , 平时看到报黄就顺手处理完了就没留意 , 想起来一点更一点

网上千篇一律都是这么写的:

其返回的是Optional类型,该类型是为了规避NULL错误。

应该使用orElse(“如果值为null的替代值”) 替代 get() 。

为什么?IDEA给出的提示

'Optional.get()'方法缺少'Optional.isPresent()'方法的检查

*isPresent()方法通过返回boolean值来在get()之前判断是不是有值 

检查提示信息 : 你在调用Optional.get()方法之前没有提前对optional对象进行一个判断 : 判断对象里有没有东西。如果optional是空的,你调用 Optional.get() 将会抛出一个异常

代码优化过程

// 报黄代码
User user = refUserOptional.get();

既然是缺少判断,我就蹩脚加一个简单的判断:

User user = 
    refUserOptional.isPresent() ? refUserOptional.get() : null

// 意思就是先判断是否存在,存在即true,然后get()拿到内容
// 若不存在就null

还是报黄 , 提示有现成的方法可以替代 : 

User user = 
    refUserOptional.orElse(null);

// 意思是一样的,就是你不用写那么长了,直接用orElse就行,

// 如果optional没东西就返回null , 你要返回别的在括号里造 , 但是类型要对上

// 比如我这个是User , 那我 orElse( 这里要填User类型的 )

额外做一下Optional的科普

Optional是什么

Java8带来的一个类 ,属于java.util包下的(java.util.Optional类)

本文报黄的get()方法用于获取该Optional实例(userOptional)的值。

如果userOptional实例中不存在任何值,直接用userOptional调用get()会报NoSuchElementExcpetion无此元素异常

Optional.get()

参数 : 无 , 不能传参

返回 : Optional类的实例的值

举例 : 

public static void main(String[] args) 
    { 
  
        // 创建一个Optional对象
        Optional<Integer> optional = Optional.of(520); 
  
        // 直接打印optional对象 
        System.out.println("Optional: " + optional); 
  
        // 打印optional.get()
        System.out.println("Value of this Optional: "+ optional.get()); 
    } 
}
"控制台打印结果"
直接打印optional  :  Optional[520]
打印optional.get():  520

 如果Optional是空的,此时再分别打印optional和optional.get() : 

"控制台打印结果"
直接打印optional  :  Optional.empty
打印optional.get(): java.util.NoSuchElementException: No value present

 除了检查获得的内容是否为空/合法外, 也可以用来检查参数↓

Optional (Java SE 9 & JDK 9 )

OPTIONAL的一些用法_niuniu1014的博客-CSDN博客_optional怎么用

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值