随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。

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 2022-02-05 18:30  时间完全不够用啊  阅读(184)  评论(0编辑  收藏  举报