[Guava使用教程]-Optional优雅的使用null
"Null sucks." -Doug Lea
"I call it my billion-dollar mistake." - Sir C. A. R. Hoare, on his invention of the null reference
轻率地使用null可能会导致很多令人费解的问题。我们发现95%的集合类不接受null值作为元素。我们认为,相比默默地接受null,使用快速失败操作拒绝null值对开发者更有帮助。
null的含糊语义让人很不舒服。null很少可以明确地表示某种语义,例如,Map.get(key)返回null时,可能表示map中的值是null,亦或map中没有key对应的值。null可以表示失败、成功或几乎任何情况。使用Null以外的特定值,会让你的逻辑描述变得更清晰。
null确实也有合适和正确的使用场景,如在性能和速度方面null是廉价的,而且在对象数组中,出现null也是无法避免的。但相对于底层库来说,在应用级别的代码中,null往往是导致混乱,疑难问题和模糊语义的元凶,就如同我们举过的Map.get(key)的例子。最关键的是,null本身没有定义它表达的意
思。
鉴于这些原因,很多Guava工具类对Null值都采用快速失败操作,除非工具类本身提供了针对Null值的因变措施。此外,Guava还提供了很多工具类,让你更方便地用特定值替换Null值。