使用和避免null
优质
小牛编辑
136浏览
2023-12-01
null本身不是对象,也不是Objcet的实例
问题:
null代表不确定的对象, 是一个很模糊的概念, 容易产生二义性
Map.get(key)若返回value值为null,其代表的含义可能是该键指向的value值是null,亦或者该键在map中并不存在
优点:
从内存消耗和效率方面,null更加廉价
优化: Optional
com.google.common.base.Optional
Optional<T> possbile = Optional.formNullable(T); //将一个T的实例转换为Optional对象(T可以为空)
boolean present = possible.isPresent(); //若Optional包含的T实例不为null,则返回true;若T实例为null,返回false
T t = possible.get(); //返回Optional包含的T实例,该T实例必须不为空;否则,抛出一个IllegalStateException异常
构建一个Optional对象
Optional.of(T); //将一个T的实例转换为Optional对象(T不可以为空)
Optional.absent(); //获得一个Optional对象,其内部包含了空值
Optional.fromNullable(T); //将一个T的实例转换为Optional对象,T的实例可以不为空,也可以为空
//Optional.fromNullable(null) 等同于 Optional.absent()
Optional实例方法
boolean isPresent(); //若Optional包含的T实例不为null, 返回true; 否则, 返回false
T get(); //若Optional包含的T实例不为null, 返回T; 否则, 抛出IllegalStateException
T or(T); //若Optional包含的T实例不为null, 返回T; 否则, 返回参数输入的T实例
T orNull(); //若Optional包含的T实例不为null, 返回T; 否则, 返回null