别再滥用 != null 判空了
为什么滥用 != null 是个坑?
用 Optional 来拯救你的代码
// 没用 Optional 前的老方法public String getName(Person person) {if (person != null) {return person.getName();} else {return "Unknown";}}
import java.util.Optional;public String getName(Person person) {return Optional.ofNullable(person).map(Person::getName).orElse("Unknown");}
少返回 null,多抛异常
// 不推荐的返回 null 方式public Person findPersonById(int id) {if (id < 0) {return null;}// 查找逻辑}
Person person = findPersonById(-1);if (person != null) {// 处理 person}
// 推荐的抛异常方式public Person findPersonById(int id) {if (id < 0) {throw new IllegalArgumentException("ID 不能小于 0");}// 查找逻辑}
过度判空 = 自找麻烦
if (obj != null && obj.getField() != null && obj.getField().getSubField() != null) {// 逻辑处理}
// 使用 OptionalOptional.ofNullable(obj).map(Object::getField).map(Field::getSubField).ifPresent(subField -> {// 逻辑处理});
实战:处理用户输入
// 传统方法,判空处理public String processInput(String input) {if (input != null) {return input.trim();} else {return "default";}}
import java.util.Optional;public String processInput(String input) {return Optional.ofNullable(input).map(String::trim).orElse("default");}
实战:获取配置参数
// 传统方法,返回 null 并判空public String getConfig(String key) {String value = configMap.get(key);if (value != null) {return value;} else {return null;}}public void useConfig() {String value = getConfig("someKey");if (value != null) {// 使用配置} else {// 使用默认值}}
import java.util.Optional;public Optional<String> getConfig(String key) {return Optional.ofNullable(configMap.get(key));}public void useConfig() {String value = getConfig("someKey").orElse("defaultValue");// 使用配置或默认值}
目前,对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
资料包含了《IDEA视频教程》、《最全python面试题库》、《最全项目实战源码及视频》及《毕业设计系统源码》,总量高达650GB。全部免费领取!全面满足各个阶段程序员的学习需求。