您的位置 首页 java

java新特性之Optional类介绍,解决空指针问题的终极类

Optional类作用

Optional类被 final 修饰,是没有子类的工具类。主要作用就是为了避免null检查,防止空指针异常的作用。

以前对null的处理

对于 字符串 ,传统的空指针问题解决方案:

  String  name = null;
if (name != null) {
  System.out.println(name.length());
} else{
  System.out.println("字符串为空!");
}  

这样的写法显得很呆![吐舌]

创建方式Optional.of(T value)

Optional.of方法创建的Optional对象, 不能传入null值

 // 通过of方法,of方法不支持null
Optional<String> op1 = Optional.of("zhangsan");
// NullPointerException
Optional<Object> op2 = Optional.of(null);  

null值会报空指针异常,原因是调用了 Objects.requireNonNull(value)

 public  static  <T> T requireNonNull(T obj) {
  if (obj == null)
    throw new NullPointerException();
  return obj;
}  

创建方式Optional.ofNullable(T value)

Optional.of方法创建的Optional对象, 支持传入null值

 // 通过ofNullable方法,支持传入null
Optional<String> op1 = Optional.ofNullable("zhangsan");
Optional<Object> op2 = Optional.ofNullable(null);  

支持传入null值原因:

 public static <T> Optional<T> ofNullable(T value) {
    return value == null ? empty() : of(value);
}  

Optional类解决空指针方案

传入User对象,获取userName属性值,有值把值转大写返回,无值返回空字符串。

 public class Test {
    public static  void  main(String[] args) {
        User user1 = new User();
        user1.setUserName("张三");
        User user2 = new User();
        User user3 = null;
        System.out.println("user1 " + test(user1));
        System.out.println("user2 " + test(user2));
        System.out.println("user3 " + test(user3));
    }

    /**
     * 传入User对象,获取userName属性值,
     * 有值把值转大写返回,
     * 无值返回空字符串。
     */
    public static String test(User user) {
        return Optional.ofNullable(user)
          .map(User::getUserName)
          . map (String::toUpperCase)
          .orElse("");
    }
}  

执行效果图

字符串 空值 处理:

 String str = null;
System.out.println(Optional.ofNullable(str).orElse(""));  

文章来源:智云一二三科技

文章标题:java新特性之Optional类介绍,解决空指针问题的终极类

文章地址:https://www.zhihuclub.com/191074.shtml

关于作者: 智云科技

热门文章

网站地图