1 /** 2 * <h1>学会 Optional, 规避空指针异常</h1> 3 * */ 4 @SuppressWarnings("all") 5 public class OptionalUsage { 6 7 private static void badUsageOptional() { 8 9 Optional<User> optional = Optional.ofNullable(null); 10 // 对比一下 11 User user = optional.orElse(null); // good 12 user = optional.isPresent() ? optional.get() : null; // bad 13 } 14 15 public static class User { 16 private String name; 17 18 public String getName() { 19 return name; 20 } 21 } 22 // 没有意义的使用方法 23 private static void isUserEqualNull() { 24 25 User user = null; 26 if (user != null) { 27 System.out.println("User is not null"); 28 } else { 29 System.out.println("User is null"); 30 } 31 32 Optional<User> optional = Optional.empty(); 33 if (optional.isPresent()) { 34 System.out.println("User is not null"); 35 } else { 36 System.out.println("User is null"); 37 } 38 } 39 40 private static User anoymos() { 41 return new User(); 42 } 43 44 public static void main(String[] args) { 45 46 // 没有意义的使用方法 47 isUserEqualNull(); 48 49 User user = null; 50 Optional<User> optionalUser = Optional.ofNullable(user); 51 // 存在即返回, 空则提供默认值 52 optionalUser.orElse(new User()); 53 // 存在即返回, 空则由函数去产生 54 optionalUser.orElseGet(() -> anoymos()); 55 // 存在即返回, 否则抛出异常 56 optionalUser.orElseThrow(RuntimeException::new); 57 58 // 存在才去做相应的处理 59 optionalUser.ifPresent(u -> System.out.println(u.getName())); 60 61 // map 可以对 Optional 中的对象执行某种操作, 且会返回一个 Optional 对象 62 optionalUser.map(u -> u.getName()).orElse("anymos"); 63 64 // map 是可以无限级联操作的 65 optionalUser.map(u -> u.getName()).map(name -> name.length()).orElse(0); 66 } 67 }
标签:optionalUser,user,避免,optional,User,null,Optional,指针 From: https://www.cnblogs.com/allenxx/p/18088494