本文共 2103 字,大约阅读时间需要 7 分钟。
如何减少if else(条件判断)代码的冗长性?在软件开发中,条件判断是避免空指针异常的一种常见做法,但繁多的if else会让代码显得臃肿。Java 8提供的Optional类为我们提供了一种更简洁的解决方案。
Optional类是一个可以包含或不包含值的容器,并专门用于处理可能 null 的值。其核心方法包括:
假设selectStartTime()从数据库中查询LocalDateTime值,则getStartTime()方法原本需要五行代码:
private String getStartTime() { LocalDateTime dateTime = selectStartTime(); if (dateTime == null) { return "2020-01-01 00:00:00"; } return dateTimeToString(dateTime);}
private String getStartTime() { return Optional.ofNullable(selectStartTime()) .map(dateTime -> dateTimeToString(dateTime)) .orElseGet(() -> "2020-01-01 00:00:00");}
原代码:
User user = getCacheUser(1);if (user == null) { user = selectUserById(1);}
简化代码:
User user = Optional.ofNullable(getCacheUser(1)) .orElseGet(() -> selectUserById(1));
此前需要多层条件判断:
public String getCity(User user) throws Exception { if (user != null) { if (user.getAddress() != null) { Address address = user.getAddress(); if (address.getCity() != null) { return address.getCity(); } } } throw new Exception("对象为空");}
简化后:
public String getCity(User user) throws Exception { return Optional.ofNullable(user) .map(u -> u.getAddress()) .map(a -> a.getCity()) .orElseThrow(() -> new Exception("对象为空"));}
简化多层条件判断:
public User getUser(User user) { if (user != null) { String name = user.getName(); if ("zhangsan".equals(name)) { return user; } } else { user = new User("zhangsan"); return user; }}
简化后:
public User getUser(User user) { return Optional.ofNullable(user) .filter(u -> "zhangsan".equals(u.getName())) .orElseGet(() -> new User("zhangsan"));}
通过使用Optional的链式方法,我们减少了冗长的条件判断,使代码变得简洁明了。这种方式不仅提高了可读性,还更安全地处理了可能的null值情况。
转载地址:http://amnvz.baihongyu.com/