Optional类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yan12422/article/details/84189127

Optional类是1.8之才有的,并且被广泛使用,主要功能是进行null的相关处理,在以前进行程序开发的过程中,如果为了防止程序中出现一些空指针的 异常,经常是使用if判断

以下是传统的模式,在引用接收的一方往往都是被动的进行判断,

public class JavaAPIDemo {
    public static void main(String[] args) {
        MessageUtil.useMessage(MessageUtil.getMessage());
    }
}

class MessageUtil {

    private MessageUtil() {
    }

    public static IMessage getMessage() {
        return new MessageImpl();
    }

    public static void useMessage(IMessage msg) {
        if (msg != null) { //防止空指针的异常
            System.out.println(msg.getContent());
        }
    }

}

interface IMessage {
    public String getContent();
}

class MessageImpl implements IMessage {

    @Override
    public String getContent() {
        return "hello world";
    }
}

所以为了解决这种被动的处理操作,在Java类中提供有一个Optional类,这个类可以实现null的处理操作


返回空数据 public static T Optional T empty();
     
获取数据 public T get();
     
保存数据,但是不允许出现null,出现了空就会抛出空指针异常 public static T Optional T of(T value);
     
保存数据,允许为null public static T Optional T ofNullable(T value);
     
空的时候,返回其他数据 public T orElse(T other);
     
import java.util.Optional;

public class JavaAPIDemo {
    public static void main(String[] args) {
        //如果你为空我用new MessageImpl()
        MessageUtil.useMessage(MessageUtil.getMessage().orElse(new MessageImpl()));
    }
}

class MessageUtil {

    private MessageUtil() {
    }

    public static Optional<IMessage> getMessage() {
        /**
         * 在这里如果使用of就会报NullPointerException
         *
         * 使用ofNullable就会报java.util.NoSuchElementException: No value present
         *
         * 所以就要在上面使用orElse
         */


        return Optional.ofNullable(null);
    }

    public static void useMessage(IMessage msg) {
        if (msg != null) {
            System.out.println(msg.getContent());
        }
    }

}

interface IMessage {
    public String getContent();
}

class MessageImpl implements IMessage {
    /**
     * 返回空数据 public static T Optional T empty();
     *
     * 获取数据 public T get();
     *
     * 保存数据,但是不允许出现null,出现了空就会抛出空指针异常 public static T Optional T of(T value);
     *
     * 保存数据,允许为null public static T Optional T ofNullable(T value);
     *
     * 空的时候,返回其他数据 public T orElse(T other);
     */


    @Override
    public String getContent() {
        return "hello world";
    }
}

如果大家喜欢的可以关注我的微信公众号

猜你喜欢

转载自blog.csdn.net/yan12422/article/details/84189127