java 8 Optional 解决NullPointerException

来源:互联网 发布:数据库在企业中的应用 编辑:程序博客网 时间:2024/05/24 01:24

在Java8中,引入了一个新的类java.util.Optional ,这个Optional专门用来解决空引用的问题。对于一个方法的返回值什么的,都不需要再判断是不是null了。

package com.ven.java8.Optional;import java.util.Optional;/** * 解析Optional *  * @author xiaowen * */public class TestOptional {public static void main(String[] args) {// 创建一个对象SysUser sysUser = new SysUser("xiaowen", "男");String role = "JAVA IT";// ***************创建Optional部分 start*******// 使用of方法创建OptionalOptional<SysUser> optional = Optional.of(sysUser);Optional<String> optional3 = Optional.of(role);// Optional<SysUser> optional2 =// Optional.of(null);//如果传入的参数为null就会出现异常java.lang.NullPointerException// ofNullable(T)可有任意对象创建对象// Optional<SysUser> optional3 = Optional.ofNullable(null);// empty()返回一个空的Optional// Optional<SysUser> optional4 = Optional.empty();// ************************创建Optional部分 end******// ***********************Optional方法的使用******// get(),获取Optional中的对象SysUser sysUser2 = optional.get();System.out.println("对象:" + sysUser2);// isPresent()判断当前对象是否存在boolean present = optional.isPresent();// 类似 if(value!=null)if (present) {System.out.println("大家好!我是" + sysUser.getName() + "我是一个可爱的boy!");} else {new Throwable("出现异常,当前对象为null!");}// filter方法,// 条件判断Optional里面的对象是否满足某一个条件// 类似 if(value!=null&&value.contains("xiaowen"))// 源码 接收一个断言接口Predicate参数对象,Predicate/* * public Optional<T> filter(Predicate<? super T> predicate) { * Objects.requireNonNull(predicate); if (!isPresent()) return this; * else return predicate.test(value) ? this : empty(); } */// optional.filter(x -> x.contains("ab")).ifPresent(x::print);if (optional.isPresent() && optional.get().getName().equals("xiaowen")) {System.err.print(optional.get().getName() + "_" + optional.get().getSex());} else {System.err.println("该对象不存在该属性!");}// map方法 可以对optional里面的对象的值做处理// 类似于// if(value!=null){// String name = name.toLowerCase();// if(name.length() >1){// System.out.println(name);// }// }// 转换变量Optional<String> filter = optional3.map(String::toLowerCase).filter(result -> result.length() > 1);System.out.print("转换过后的变量:" + filter.get());// orElse 当Optional里的数据为null,想返回一些默认值// 类似// int defaultValue = (x!=null)?x:-1;String orElse = optional3.orElse("NON");System.out.println(orElse);// orElseThrow 值不存在 抛出异常// 类似// if (s != null && !s.isEmpty())// return s;// else// throw new IllegalArgumentException();// }optional3.filter(s -> !s.isEmpty()).map(s -> s.charAt(0)).orElseThrow(IllegalArgumentException::new);// 如果SysUser对象里面有一个Address对象,Address里面有addressName属性,这系都有可能为null,在// java8之前的版本判断是否为null的情况/* * public boolean judge(){ if(sysUser!=null){ * if(sysUser.getAddress()!=null){ * if(sysUser.getAddress().getAddressName()!=null){ return true; } } *  * } return false; } */// 当然也这样判断非空// return // sysUser!=null&&sysUser.getAddress()!=null&&sysUser.getAddress().getAddressName()!=null;    //Optional转换为List/*public static <T> List <T> toList(Optional<T> optional){return optional.map(Collections::singletonList).orElse(Collections.emptyList());}*/}}


0 0