问题描述
代码规范是在使用装箱类型 java.lang.Boolean 作为确定控制流的表达式时,建议使用显式的空值检查来避免可能的 NullPointerException。
应该避免这种转换并null显式处理该值。
示例
//布尔值 b
if (b) {
}
此处如果是一个基本类型,也就是boolean的时候不会出现问题。
但如果是一个java.lang.Boolean类型的对象,则在b为null的时候,抛出NPE这是因为底层调用了java.lang.Boolean#valueOf(boolean)拆箱
@NotNull
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
如果调用的是Boolean包装类
if (b) {
}
相当于
if (Boolean.valueOf(b)) {
}
建议不要使用包装类来进行条件判断,如果不得已可以使用下面的方法进行判断。
// 对于 b == false 和 b == null 都会被调用
if(Boolean.TRUE.equals(b)){
}
tips!
在java8java.util.function
包中提供了大量用于lambda
表达式的接口函数定义,例如IntFunction<Foo>
应该优先于Function<Integer, Foo>
,可以避免不必要的自动装箱。
常用的方法(例)
Function<Integer, R> ——》 IntFunction<R>
Function<Long, R> ——》 LongFunction<R>
Consumer<Integer> ——》 IntConsumer