包含空变量的Java对象是否为反模式?如果是这样的话?

Foo*_*Bar 5 java anti-patterns

如果我查询一个对象说一个动物,并且返回的对象不是null但是包含空变量是错误的吗?比如我可以打电话animal.getDeathDate(); 因为它还没死,但它返回null.因为Turtle getFlightSpeed()会返回null,因为它在添加了Turtle火箭包之前无法飞行.等等

我认为这是一种糟糕的做事方式,因为在调用对象的方法以验证它们包含非空值时,通常会导致需要大量的空检查.是否有任何关于此信息的链接可以进一步告知我和我的同事?

yai*_*air 5

null往往是模棱两可的。该字段是否尚未初始化或只是没有值?

为未初始化/不相关的字段设置一些预定义的常量通常会更好。

更好的是让一个班级只有一个责任。像这样的方法getFlightSpeed()不应该被继承,而是来自于实现一个接口(getDeathDate()但是,像 那样的方法应该在Animal仍然存在时返回一个预定义的常量)。

由 google-guava docs 带来

Doug Lea(java.util.concurrent包的作者)说Null s**ks

此外,先生CAR Hoare的,对的发明者null参考说:I call it my billion-dollar mistake

这是一个宽阔的肩膀。