【JDK】方法返回null的处理-Optional类

       Optional类的主要功能是进行null的相关处理,在以前进行程序开发的时候,如果为了防止程序之中出现空指针异常,可以追加有null的验证。

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

interface IMessage {
    public String getContent();
}

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

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

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

       在引用接收的一方往往都是被动的进行判断。为了解决这种被动的处理操作,在Java类中提供有一个Optional 的类,这个类可以实现null的处理操作,在这个类里面提供有如下的一些操作方法:

  • 返回空数据:public static Optional empty();
  • 获取数据:public T get();
  • 保存数据,但是不允许出现null:public static Optional of(T value);
    • 如果在保存数据的时候存在有null,则会抛出 NullPointerException异常;
  • 保存数据,允许为空:public static Optional ofNullable(T value);
  • 空的时候返回其它数据:public T or Else(T other);

范例:修改程序,按照正规的结构完成。

在这里插入图片描述

public class OptionalTest {
    public static void main(String[] args) {
        IMessage temp = MessageUtil.getMessage().get();//获取数据
        MessageUtil.useMessage(temp);
    }
}

interface IMessage {
    public String getContent();
}

class MessageUtil {
    private MessageUtil(){
    }
    public static Optional<IMessage> getMessage() {
        return Optional.of(new MessageImpl());//有对象
    }

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

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

       如果现在数据保存的内容是null,则就会在保存处出现异常。直接明确的告诉你空的地方在哪,of不能为空!。

public static Optional<IMessage> getMessage() {
    return Optional.of(null);//有对象
}

在这里插入图片描述

       ofNullable()方法允许保存有null,但是get获取会报错,由于Optional类中允许保存有null的内容,所以在数据获取的时候也可以进行null的处理。但是如果为null,则在使用get()获取数据的时候就会出现 Exception in thread "main" java.util.NoSuchElementException: No value present 报错信息,所以此时可以更换为orElse()方法

public static Optional<IMessage> getMessage() {
    return Optional.ofNullable(null);//有对象
}

       在所有引用数据类型的操作处理之中,null是一个重要的技术问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值