java8新特性-Optional

这篇博客介绍了Java 8中的Optional类,用于解决null安全问题。文章详细讲解了Optional的创建方法如of()和ofNullable(),以及常用方法如isPresent(), ifPresent(), orElse(), map()等。通过实例展示了Optional如何避免空指针异常,以及在实际项目中的应用,如简化代码中的if-else结构。" 103592154,7295409,Java实现多线程的三种方法详解,"['Java', '线程', '多线程']

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

Optional

 5.1 提供方法:

       1). of(),提供转换成Optional对象,不能处理null,如果值是null,直接抛出NullPointerException

       2). ofNullable(),提供转换成Optional对象,可以处理null

       3). isPresent(),存在返回true,不存在返回false,null返回false,””返回true

       4). ifPresent(),判断是否存在,存在则返回,不存在返回Optional.empty。value为lambada表达式

       5). orElse(T other),存在则返回调用对象,不存在则返回other对象

       6). orElseGet()

上面的方法都是最终操作,要么返回boolean,要么返回T本身

   7). map(),value为lambada表达式

 

这个方法是中间操作,返回Optional对象

 5.2 实例:

Optional<String> optional = Optional.of("tom");
System.out.println("present...."+optional.isPresent());
System.out.println("orElse...." + optional.orElse("jack"));

optional.ifPresent((s)-> System.out.println(s.charAt(0)));

 

Optional.of(null);// java.lang.NullPointerException

optional = Optional.ofNullable(null);

System.out.println("present...."+optional.isPresent());//false

System.out.println("orElse...." + optional.orElse("jack"));//jack

optional.ifPresent((s)-> System.out.println(s.charAt(0)));//空白

 

optional = Optional.ofNullable("");

System.out.println("present...."+optional.isPresent()); //true

System.out.println("orElse...." + optional.orElse("jack"));//空白

optional.ifPresent((s)-> System.out.println(s.charAt(0)));//java.lang.StringIndexOutOfBoundsException: String index out of range: 0

Person person = new Person();
System.out.println("of.........." + Optional.of(person));// Optional[Person{id=0, name='null'}]

Optional<Person> personOptional = Optional.ofNullable(person); System.out.println("ofNullable........."+personOptional); // Optional[Person{id=0, name='null'}]

System.out.println("isPresent............"+personOptional.isPresent());//true
personOptional.ifPresent(System.out::println);// Person{id=0, name='null'}
System.out.println("orElse ......." + personOptional.orElse(new Person(1, "yanweijie")).toString());//orElse .......Person{id=0, name='null'}


person = null;
personOptional = Optional.ofNullable(person);
System.out.println("ofNullable.null......."+personOptional);// ofNullable.null.......Optional.empty
System.out.println("isPresent............"+personOptional.isPresent());
personOptional.ifPresent(System.out::println);//没有输出
System.out.println("orElse........." + personOptional.orElse(new Person(1, "yanweijie")).toString());//orElse.........Person{id=1, name='yanweijie'}

 

//一行代码取代了无数的if、else

System.out.println(Optional.ofNullable(new Person(2,"baiweijing")).map(p -> p.getName())
        .map(name -> name.toUpperCase())
        .orElse(null));

 

以下代码是我改造的,项目中实际用到的:
 return Optional.ofNullable(obj).map((o)->{
 return JSONArray.parseArray(o.toString(), GiftWithDrawConfig.class);
 }).orElseGet(()->{
 List<GiftWithDrawConfig> giftWithDrawConfigs = giftWithDrawConfigDao.findGiftWithDrawConfigs();
 if(!CollectionUtils.isEmpty(giftWithDrawConfigs)) {
 memcachedProvider.set(activeProfile, "GIFT_WITHDRAW_CONFIG", JSONObject.toJSONString(giftWithDrawConfigs), CacheUtils.MC_DAY_7);
 }
 return giftWithDrawConfigs;
 });

 

Java8之前的判断:

/*if(null != user) {
    kfInfo.setIsOnline(user.getIsOnline());
}*/

 

//Optional.ofNullable(user).ifPresent((u)->{kfInfo.setIsOnline(u.getIsOnline());});

kfInfo.setIsOnline(Optional.ofNullable(user).map(u->u.getIsOnline()).orElse(0));

### 回答1: Java8中的Optional类是一个容器对象,可以包含null或非null值。它提供了一种优雅的方式来处理null值,避免了NullPointerException异常的出现。Optional类可以用于返回值、方法参数和实例变量等场景中,使代码更加简洁、清晰和安全。使用Optional类可以使代码更加健壮,减少了代码中的null检查和异常处理,提高了代码的可读性和可维护性。 ### 回答2: Optional类是Java 8中新引入的一个类,它的主要作用是在避免NullPointerException的情况下将null值返回给调用者。这个类是一个容器对象,它可以保存非空的对象,也可以保存空值(null)。 Optional类提供了通过判断一个对象是否为空来避免空指针异常的方式。它可以在代码中替换传统的null判断,这样可以更加方便地编写代码,并且可以使代码更加健壮。 在Java中,如果一个方法返回值为null,那么在调用该方法返回值的时候,会有可能抛出NullPointerException异常。而Optional类的出现可以帮助我们避免这种情况的出现,在调用Optional类的get()方法时,如果Optional类中保存的对象不为null,就会返回该对象,否则抛出一个NoSuchElementException异常。 Optional类还提供了一些方法来简化代码,比如orElse()方法,如果Optional类中保存的对象不为null,则返回该对象,否则返回指定的default值。还有ifPresent()方法,当Optional类中保存的对象不为null时,会执行指定的代码,否则不执行。 总之,Optional类是Java 8中一个很有用的类,它可以帮助我们更加方便地处理null值,避免空指针异常的出现,并且可以简化代码。但是需要注意的是,不应该滥用Optional类,因为它并不是完美的解决方案,有时候需要对null值进行特殊处理。 ### 回答3: Java 8在语言层面上增加了一个新的类:Optional。这是一个特殊的容器对象,可以包含一个null或非null的值。 Optional的目的是解决Java中的null引用问题。在Java中,如果一个变量被赋值为null,而我们试图调用该变量所对应的方法,那么就会出现NullPointerException异常。 使用Optional可以避免这种情况的发生。如果一个变量是Optional对象,那么我们必须显式地检查该对象是否包含非null的值,才能对其进行操作。这样,在我们试图调用该变量所对应的方法之前,就可以避免空指针异常的发生。 Optional类提供了很多方法来判断是否有值、获取值、如果没有值则返回默认值等等,使得我们可以更加方便地处理空值。 下面是一些Optional类提供的方法: 1. Optional.of(T value):创建一个包含非null值的Optional对象,如果T为null,则抛出NullPointerException异常。 2. Optional.ofNullable(T value):创建一个Optional对象,如果T为null,则该对象为空。 3. Optional.empty():创建一个空的Optional对象。 4. get():如果值存在,则返回该值,否则抛出异常。 5. orElse(T other):如果值存在,则返回该值,否则返回其他默认值。 6. isPresent():返回一个boolean类型的值,表示该Optional对象是否包含值。 7. ifPresent(Consumer<? super T> consumer):如果该Optional对象包含值,则对该值执行给定的操作。 在编写Java程序时,我们应该始终努力避免使用null值。使用Optional类,可以使得我们的代码更加健壮、可读性更强。但是,过多地使用Optional可能会导致代码过于冗长,所以在使用的过程中需要权衡利弊。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值