随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。
posts - 398,comments - 0,views - 13万

Optional中的方法

 

代码测试

复制代码
import java.util.Optional;

/*
Optional类(JDK1.8提供)的主要功能是进行null的相关处理,在以前进行程序开发的时候,为了防止程序出现null指向异常,往往追加有null的验证;
传统的引用传递:在引用接收的一方都是被动的进行判断,例如去银行取钱,判断是否为假币应该是银行的任务,但是如果银行不进行判断那么这个任务就交到了取钱人的身上,取钱人就属于被动一方
所以为了解决被动的处理操作,在java中提供了Optional类以实现空的处理操作:
    - 返回空数据:public static<T> Optional<T>empty();
    - 获取数据:public T get();
    - 保存数据,但是不允许出现null: public static<T> Optional<T> of(T value);
        |- 如果在保存数据时候出现null,则会出现NullPointerException的异常
    - 保存数据,允许为空: public static<T> Optional<T> ofNullable(T value);
    - 空的时候返回其它数据:public T orElse(T other);
    在所有引用数据类型的操作处理中,null是一个重要的技术问题,所以Optional类有很大的用处,在以后的开发中也会进行大量使用
*/
interface IMessage {
    String getContent();
}

class MessageImpl implements IMessage {
    @Override
    public String getContent() {
        return "www";
    }
}

class MessageUtil {
    private MessageUtil() {
    }

    public static Optional<IMessage> getMessage() {
//        return Optional.of(new MessageImpl());  // of()方法返回非空的Optional类型的对象,如果of()方法传入的对象为空,则会出现异常
        return Optional.ofNullable(null);   // 可以传入空的参数
    }

    public static void useMessage(IMessage msg) {
        if (msg != null) {
            System.out.println(msg.getContent());   // 可能会出现空而导致空指向
        }
    }
}

public class Main {
    public static void main(String[] args) {
        // 如果为空使用get()方法获取数据就会出现
        // Exception in thread "main" java.util.NoSuchElementException: No value present
        //    at java.base/java.util.Optional.get(Optional.java:143)
        //    at Demo_2_5_Optional.Main.main(Main.java:45)
        //    的异常信息,所以此时可以跟换为orElse()方法
        IMessage tem = MessageUtil.getMessage().orElse(new MessageImpl());  // get() 获取数据,返回的是get()方法设置的泛型类型
        MessageUtil.useMessage(tem);
    }
}
复制代码

 

posted on   时间完全不够用啊  阅读(206)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示