空对象 vs null

  1. 看法
  2. 相关讨论/扩展阅读

看法

null不是一个友好的接口

当我们return的null没有被正确处理,就会产生null exception,仔细思考,错误的原因是null它不属于基本类型,它自成一类。因为它不属于任何一类,所以它不能转换成其他类型。

1549207890410

从这个角度出发,我们可以清晰知道,当代码需要接口属性时候,我们应该使用empty object而不是Null。而接口属性常常意味着我们不需要去了解代码实现底层,换句话说,代码编写者return的值是否为空,与调用者无关。

1
2
// 仅想获取查询结果,不在乎是否为空。
List rsl = dao.query(id);

而为了强调return值是否为空很重要,代码编写者就会使用强调功能。null就是强调功能之一。Go语言通过多返回值进行强调

1
2
3
4
5
6
7
8
9
10
//处理错误
retValue, err := dosth()
if err == nil { 
	//...   
} else { 
   //...
}

//忽略错误
retValue, _ := dosth()

通过强制处理是否忽略错误,从而达到强调的效果。


相关讨论/扩展阅读