Java 程序员工作中遇到最多的谬误就是空指针异样,无论你如许仔细,一不留神就从代码的某个中央冒出 NullPointerException,真是令人头疼。
到底怎么防止空指针异样?看完这篇文章,能够帮忙你。
1. 对象设置默认值
Object obj = new Object();
String str = "";
2. 字符串比拟,常量放后面
if ("success".equals(status)) {// doSomething()
}
3. 办法返回空集合
public List<User> getUsers() {List<User> users = userService.selectList();
return users == null ? Collections.emptyList() : users;}
4. 转 String,用 valueOf() 办法代替 toString()
User user = null;
String str = String.valueOf(user);
valueOf() 办法源码是:
public static String valueOf(Object obj) {return (obj == null) ? "null" : obj.toString();}
5. 判空,用工具库
apache commons 是最弱小的,也是应用最宽泛的工具类库,用它就行了。
// 字符串判空
String str = null;
boolean isEmpty = StringUtils.isEmpty(str);
// 判空的时候,会主动疏忽空白字符,比方空格、换行
boolean isBlank = StringUtils.isBlank(str);
// 汇合判空
List<String> list = null;
boolean isEmpty = CollectionUtils.isEmpty(list);
6. 用注解帮你查看
class User {
@NotNull
private Integer id;
@NotBlank
private String name;
}
7. 防止不必要的拆箱
// 上面会抛异样
Integer id = null;
int newId = id;
8. 数据库字段要设置默认值
数值类型的字段设置默认 0,varchar 类型字段设置默认 ” 空串。
防止取出来应用的时候,还要进行判空。
9. 应用 Java8 的 Optional
// 获取用户姓名,上面的代码,不会报异样
User user = null;
Optional<User> optUser = Optional.ofNullable(user);
String name = optUser.map(User::getName).orElse(null);
你感觉怎么样?还有哪些方法能防止空指针异样?