我们已经开始使用FindBugs并@Nonnull
适当地注释了我们的参数,它很有效地指出了周期早期的错误。到目前为止,我们一直在null
使用Guava的方法继续检查这些参数checkNotNull
,但我宁愿null
仅在边缘进行检查-无需检查即可输入值的地方null
,例如SOAP请求。
// service layer accessible from outside
public Person createPerson(@CheckForNull String name) {
return new Person(Preconditions.checkNotNull(name));
}
...
// internal constructor accessed only by the service layer
public Person(@Nonnull String name) {
this.name = Preconditions.checkNotNull(name); // remove this check?
}
我了解这本身@Nonnull
并不会阻止null
价值观。
但是,鉴于FindBugs会指出将值从未标记字段转移到已标记字段的任何地方@Nonnull
,我们是否可以依靠它来捕获这些情况(它确实如此),而不必在null
传递给它们的任何地方检查这些值系统?我是否天真地想要信任该工具并避免进行这些冗长的检查?
底线:虽然删除null
下面的第二张支票似乎很安全,但这是不好的做法吗?
这个问题可能与“ 如果有人不希望null,是否应该检查null”这个问题太相似了,但是我要特别问一下@Nonnull
注解。
@Nonnull
:作为合同规范的方式。我一直在取消合同背后的防御性检查,到目前为止没有任何麻烦。