首页 > 其他分享 >Optional类

Optional类

时间:2024-01-24 09:47:54浏览次数:17  
标签:opt 返回 对象 void new Optional

  1. 到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码。受到Google Guava的启发,Optional类已经成为Java 8类库的一部分。
  2. Optional<T> 类(java.util.Optional) 是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。
  3. Optional类的Javadoc描述如下:这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
  4. Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
  5. 创建Optional类对象的方法:
Optional.of(T t) : 创建一个 Optional 实例,t必须非空; Optional.empty() : 创建一个空的 Optional 实例 Optional.ofNullable(T t):t可以为null
  1.  判断Optional容器中是否包含对象:
  2. boolean isPresent() : 判断是否包含对象
void ifPresent(Consumer<? super T> consumer) :如果有值,就执行Consumer接口的实现代码,并且该值会作为参数传给它。
  1. 获取Optional容器的对象:
 T get(): 如果调用对象包含值,返回该值,否则抛异常  T orElse(T other) :如果有值则将其返回,否则返回指定的other对象。  T orElseGet(Supplier<? extends T> other) :如果有值则将其返回,否则返回由Supplier接口实现提供的对象。  T orElseThrow(Supplier<? extends X> exceptionSupplier) :如果有值则将其返回,否则抛出由Supplier接口实现提供的异常。
@Test
public void test1() {
Boy b = new Boy("张三");
Optional<Girl> opt = Optional.ofNullable(b.getGrilFriend());
// 如果女朋友存在就打印女朋友的信息
opt.ifPresent(System.out::println);
}
@Test
public void test2() {
Boy b = new Boy("张三");
Optional<Girl> opt = Optional.ofNullable(b.getGrilFriend());
// 如果有女朋友就返回他的女朋友,否则只能欣赏“嫦娥”了
Girl girl = opt.orElse(new Girl("嫦娥"));
System.out.println("他的女朋友是:" + girl.getName());
} 
@Test
public void test3(){
Optional<Employee> opt = Optional.of(new Employee("张三", 8888));
//判断opt中员工对象是否满足条件,如果满足就保留,否则返回空
Optional<Employee> emp = opt.filter(e -> e.getSalary()>10000);
System.out.println(emp);
}
@Test
public void test4(){
Optional<Employee> opt = Optional.of(new Employee("张三", 8888));
//如果opt中员工对象不为空,就涨薪10%
Optional<Employee> emp = opt.map(e -> 
{e.setSalary(e.getSalary()%1.1);return e;});
System.out.println(emp);
}

 

标签:opt,返回,对象,void,new,Optional
From: https://www.cnblogs.com/RedOrange/p/17702766.html

相关文章

  • Optional.of() 导致得空指针
    //会报空指针,list.get(0).getXXXXXX返回了null,导致of()方法抛出空指针BigDecimals=Optional.of(list.get(0).getXXXXXX).orElse(BigDecimal.ZERO);//正常BigDecimals=Optional.ofNullable(list.get(0).getXXXXXX).orElse(BigDecimal.ZERO);Optional.of()源码pu......
  • 使用Optional更优雅地处理非空判断
    (一)引言在平常的编码之中,有一个错误总会在你的意料之外出现,那就是空指针异常。空指针的出现也很简单,你得到了一个null对象,调用了一些方法,出现空指针异常。空指针会出现在各种地方,常见的比如Map.get()没有获取到对象就调用对象例的方法,类对象没有获取到就调用类中的方法。空指针......
  • Dating Java8系列之巧用Optional之优雅规避NPE问题
    给我馍馍/文  避之不及的NullPointerException NPE:NullPointerException空指针异常是最常见的Java异常之一,抛出NPE错误不是用户操作的错误,而是开发人员的错误,应该被避免,那么只能在每个方法中加入非空检查,阅读性和维护性都比较差。以下是一个常见的嵌套对象:一个用......
  • 写写java中的optional
    当我们写代码的时候经常会碰见nullpointer,所以在很多情况下我们需要做各种非空的判断。JDK8中引入了optional,他是一个包装好的类,我们可以把对象传入optional对象中,接下来就可以在optional中进行安全的消费一般使用的都是optional的方法ofNullable,这样当对象为null的时候会顺利执......
  • Optional 类的使用
    Optional类的使用引言因为java的streamapi的终止操作符可能会返回Optional对象,所以研究一下Optional类Optional概念看之前代码中Optional​的使用:Optional<JdPromotionDiscountInfoBO>jdPromotionOptional=discountInfos.stream().filter(x->promotion......
  • Optional常用方法实例, 源码挺简单的,重要的是option 与 stream 以及lambda 的连贯使用
    Optionalstaticmethods: Optional.ofNullable();Optional.empty();Optional.of(); ​ empty():publicstatic<T>Optional<T>empty(){@SuppressWarnings("unchecked")Optional<T>t=(Optional<......
  • Optional 类操作
    Optional.ofNullable和Optional.of是Java8引入的Optional类中的两个静态方法,它们都用于创建Optional对象,但是它们处理空值(null)的方式不同。Optional.of(Tvalue)方法接受一个非空的值作为参数,并返回包含给定的非空值的Optional对象。如果传递给of方法的参数是n......
  • Angular 依赖注入领域里 optional constructor parameters 的概念介绍
    Angular依赖注入(DI)是一个强大且灵活的设计模式,它可以帮助我们更好地管理和组织我们的代码。构造函数参数的可选性(Optional)是AngularDI系统的一个重要特性。这种特性允许我们将某些服务或值作为可选依赖注入到组件或服务中,这样,如果这些服务或值不存在,我们的代码仍然可以正常工......
  • null 不好,我真的推荐你使用 Optional
    "Null很糟糕."-DougLea。DougLea是一位美国的计算机科学家,他是Java平台的并发和集合框架的主要设计者之一。他在2014年的一篇文章中说过:“Nullsucks.”1,意思是null很糟糕。他认为null是一种不明确的表示,它既可以表示一个值不存在,也可以表示一个值未知,也可以表示......
  • 无涯教程-Dart - Optional Parameters with Default Values函数
    默认情况下,还可以为函数参数分配值,但是,此类参数也可以是显式传递的值。语法function_name(param1,{param2=default_value}){//......}示例voidmain(){test_param(123);}voidtest_param(n1,{s1:12}){print(n1);print(s1);}它应该返回......