注意:我所说的那些注释是由 JSR305 指定的。
我有最新的 Findbugs (1.3.9), 当某些用 @Nonnull 注释的字段被分配为 null 时,它会正确发现错误。
但是,在我的项目中,“非空逻辑”是默认情况。我会说 null 仅在 5% 的情况下被明确允许。
因此,用@Nonnull 注释 95% 的字段会非常不方便。我宁愿用 @Nullable 注释这 5% 的字段。
我试图用@Nonnull 注释整个包,它不会改变任何东西。
那么,以某种方式可以指定默认逻辑吗?
注意:我所说的那些注释是由 JSR305 指定的。
我有最新的 Findbugs (1.3.9), 当某些用 @Nonnull 注释的字段被分配为 null 时,它会正确发现错误。
但是,在我的项目中,“非空逻辑”是默认情况。我会说 null 仅在 5% 的情况下被明确允许。
因此,用@Nonnull 注释 95% 的字段会非常不方便。我宁愿用 @Nullable 注释这 5% 的字段。
我试图用@Nonnull 注释整个包,它不会改变任何东西。
那么,以某种方式可以指定默认逻辑吗?
我不确定 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 {
}
另请参阅这篇文章。
注意:至少该注释存在于一些 FindBugs 测试用例中。
FindBugs 现在有@ReturnValuesAreNonnullByDefault。它还有@DefaultAnnotation、@DefaultAnnotationForFields、@DefaultAnnotationForMethods 和@DefaultAnnotationForParameters。
但我应该声明我没有在我的项目中使用任何这些..