为什么checkNotNull()没有用@Nonnull注释
我发现不方便之处在于checkNotNull()
番石榴中的前提条件没有标注@Nonull
注释。考虑以下示例:
State(Set<Model> models, Set<Variation> variations) { this.models = checkNotNull(models);
this.variations = checkNotNull(variations);
if (this.variations == null) {
throw new IllegalArgumentException();
}
this.engine = createEngine();
}
因此IDE找不到variations ==
null总是错误的。是否有任何特殊原因为什么不标记此前提条件@Nonull
(即使其参数是使用定义的@Nullable
)。
回答:
@Nonnull
很抱歉,我们没有在任何地方使用过。为什么?我们尝试添加更多的空检查注释,发现:
- 添加所有其他注释非常冗长。
@Nullable
这就是我们所需要的NullPointerTester
。诚然,对于Guava开发人员而言,这比Guava用户更为重要。@Nullable
似乎遇到了大多数问题。我承认很难说在用户找到其他注释之前会捕获多少未检查的错误。
详细是最主要的。它变得很疯狂,尤其是对于子类型化和参数化类型。我们试图为注释选择一个最佳位置。也许有一天我们会更改它。但就目前而言,这就是事物按原样进行的原因。
(如果我们做了一些事情,我怀疑我们会尝试@Nonnull
使用默认值,@CheckForNull
而不是使用例外。但是我还没有仔细研究它以确保我理解正确。)
以上是 为什么checkNotNull()没有用@Nonnull注释 的全部内容, 来源链接: utcz.com/qa/420647.html