转自:
下文笔者讲述jdk8中Optional关键字的功能简介说明,如下所示:
Optional关键字的功能
Optional类的功能: 1.用于处理空指针异常(NullPointerException)的问题 2.Optional是一个包装类,它可包装的对象可以是空,也可以是一个存在的对象
例: 常见的空指针异常判断示例
String pId = user.getInfo().getId().toLowerCase(); //为了不产生空指针异常,我们需做以下的判断 if (user != null) { Info info = user.getInfo(); if (info != null) { Id pid = info.getId(); if (pid != null) { pid = pid.toLowerCase(); } } }
那么,我们发现以上的代码非常的冗余,此时我们就可以使用Optional进行改写,例
String pId = Optional.ofNullable(user) .flatMap(u -> u.getInfo()) .flatMap(a -> a.getId()) .map(c -> c.toLowerCase()) .orElse("default");
从以上Optional改写上,我们可以看出Optional写出的代码,非常的优雅
那么Optional到底如何使用呢?下文笔者将一一道来,如下所示
创建Optional实例
Optional<User> emptyOpt = Optional.empty(); 以上将创建一个null optional对象示例
使用of()和ofNullable()方法创建Optional
注意事项: of()方法,当传入一个null值时,则会包NPE(NullPointerException)异常
例:
//使用of方法创建的对象,可能报NPE异常 Optional<User> opt = Optional.of(user); //此时我们需采用 ofNullable()方法创建Optional对象 //才能避免报异常 Optional<User> opt = Optional.ofNullable(user);
访问Optional对象的值
String name = "java265.com"; Optional<String> opt = Optional.ofNullable(name); assertEquals("java265.com", opt.get()); 注意事项: 以上的get方法,也可能报NPE异常,此时我们需使用isPresent()进行相应的判断 User user = new User("java265.com", "8888"); Optional<User> opt = Optional.ofNullable(user); assertTrue(opt.isPresent()); assertEquals(user.getName(), opt.get().getName());
optional返回默认值
Optional类返回默认值,可使用orElse()方法或orElseGet方法 此方法的功能为当Optional为null时,返回默认值