我应该使用哪个@NotNull Java注释?

问题:

我希望使我的代码更易读,并且使用像IDE代码检查和/或静态代码分析(FindBugs和Sonar)这样的工具来避免NullPointerExceptions。许多工具似乎与彼此的@NotNull @NonNull @Nonnull注释不兼容,并且在代码中列出所有这些工具将是非常糟糕的。任何建议哪一个是“最好的”?以下是我发现的等效注释的列表:

回答:

我非常喜欢Checker Framework,它是类型注释(JSR-308)的实现,用于实现缺陷检查器,如无效检查器。我没有真的尝试过任何其他的比较,但我对这个实现感到满意。
我不隶属于提供该软件的组,但我是粉丝。
我喜欢这个系统的四件事情

  1. 它具有nullness(@Nullable)的缺陷检查器,但也具有immutabilityinterning(和其他)的检查器。我使用第一个(无效),我试图进入使用第二个(immutability / IGJ)。我正在尝试第三个,但我不确定长期使用它。我不相信其他检查器的一般有用性,但是很高兴知道框架本身是一个用于实现各种附加注释和检查器的系统。
  2. default setting for nullness checking效果很好:非本地(NNEL)以外的非空值。基本上这意味着,默认情况下,检查器会将local(除了局部变量,除了默认情况下具有@NonNull类型)外,还可以处理everyhing(实例变量,方法参数,泛型类型等)。根据文件:
     

    The NNEL default leads to the smallest number of explicit annotations in your code.

    如果NNEL不适用于您,您可以为类或方法设置不同的默认值。

  3. 此框架允许您通过将注释包含在注释中与一起使用:例如/*@Nullable*/。这是很好的,因为您可以注释和检查库或共享代码,但仍然可以使用该库/共享编码在另一个不使用该框架的项目。这是一个很好的功能。我已习惯于使用它,即使我倾向于启用所有项目的Checker框架。
  4. 该框架有一种方法annotate APIs您使用尚未通过使用存根文件注释为空。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Which @NotNull Java annotation should I use?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

98 − 93 =