注意:我正在谈论的那些注释是由JSR305指定的。
我有最新的Findbugs(1.3.9),它发现错误正确 当一些用@Nonnull注释的字段被赋值为null时。
但是,在我的项目中,“非空逻辑”是默认情况。我会这样说 null仅在5%的情况下明确允许。
所以,这将非常不方便 使用@Nonnull注释95%的字段。我宁愿更喜欢注释那些 5%的字段包含@Nullable。
我尝试使用@Nonnull注释整个包,它不会改变任何内容。
那么,以某种方式可以指定默认逻辑?
答案 0 :(得分:1)
我不确定Fiundbug是否可以处理以下注释,但如果您想使用“NonNull”注释所有包,则可能需要使用:
@ParametersAreNonnullByDefault
/**
* This annotation can be applied to a package, class or method to indicate that
* the method parameters in that element are nonnull by default unless there is:
* <ul>
* <li>An explicit nullness annotation
* <li>The method overrides a method in a superclass (in which case the
* annotation of the corresponding parameter in the superclass applies)
* <li> there is a default parameter annotation applied to a more tightly nested
* element.
* </ul>
*
*/
@Documented
@Nonnull
@TypeQualifierDefault(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface ParametersAreNonnullByDefault {
}
另见this article。
注意:some FindBugs test cases中至少存在该注释。
答案 1 :(得分:0)
FindBugs现在有@ReturnValuesAreNonnullByDefault。它还有@DefaultAnnotation,@ DefaultAnnotationForFields,@ DefaultAnnotationForMethods和@DefaultAnnotationForParameters。
但我不应该否认我在项目中没有使用任何这些......