本章内容
口nu11引用引发的问题,以及为什么要避免nu11引用从nu11到optiona1:以nu11安全的方式重写你的域模型让optiona1发光发热:去除代码中对nu11的检查
读取optiona1中可能值的几种方法
口对可能缺失值的再思考
如果你作为Java程序员曾经遭遇过Nu11PointerException,请举起手。如果这是你最常遭遇的异常,请继续举手。非常可惜,这个时刻,我们无法看到对方,但是我相信很多人的手这个时刻是举着的。我们还猜想你可能也有这样的想法:“毫无疑问,我承认,对任何一位Java程序员来说,无论是初出茅庐的新人,还是久经江湖的专家,ullPointerexception都是他心中的痛,可是我们又无能为力,因为这就是我们为了使用方便甚至不可避免的像nu11引用这样的构造所付出的代价。”这就是程序设计世界里大家都持有的观点,然而,这可能并非事实的全
部真相,只是我们根深蒂固的一种偏见。1965年,英国一位名为Tony Hoare的计算机科学家在设计ALGOL W语言时提出了nu11引用的想法。ALGOLW是第一批在堆上分配记录的类型语言之一。Hoare选择nu11引用这种方式,“只是因为这种方法实现起来非常容易”。虽然他的设计初衷就是要“通过编译器的自动检测机制,确保所有使用引用的地方都是绝对安全的”,他还是决定为nu11引用开个绿灯,因为他认为这是为“不存在的值”建模最容易的方式。很多年后,他开始为自己曾经做过这样的决定而后悔不迭,把它称为“我价值百万的重大失误”。我们已经看到它带来的后