15

我的编译器警告我关于A default nullness annotation has not been specified for the package. 我正在使用带有 Java 7 的 Juno。

您应该@NonNullByDefault作为包选项添加的文档统计信息,但我不知道这意味着什么。

我可以以某种方式设置NonNullByDefault整个包裹吗?在 Eclipse 中,我无法右键单击一个包并说出add option或类似的内容。

还是我只是添加@NonNullByDefault到包中的任何类,然后它对该包中的所有 bean 都有效?还是我必须在包中创建一些元信息文件来添加包选项?我一定是瞎了眼,因为我在网上找不到任何帮助......

一个小例子会很棒。

4

3 回答 3

14

总结:
让上述建议发挥作用对我来说并不直观。我刚刚想出的实际解决方案也不是。在 package-info.java 文件中
将注释放在包声明之上
b. 将 NonNullByDefault 注释导入包声明之后


详细信息:
我不知道我是否是唯一一个阅读上述答案并且无法弄清楚如何使其工作的人。因此,为了更加清楚,这是我为使其最终在 Eclipse-Juno 中工作而采取的(不明显也不直观的)步骤:

  1. 在包资源管理器中,转到显示警告(或错误)消息的根 Java 包,该消息以“尚未为包指定默认空值注释... ” - 对于此示例,请假设包名称为“org.public_domain "
  2. 在 Java 包上,激活右键菜单并选择“新建 -> 包”选项 - 是的,我知道你的包已经存在,认为它是 Eclipse 特性 - 它不会对你现有的包做任何事情
  3. 当“ New Java Package ”对话框出现时,选中“ Create package-info.java ”复选框并点击“Finish”
  4. 您的 Java 编辑器现在将显示一个名为“ package-info.java ”的新文件,其中包含以下内容:

    /**
     * 
     */
    /**
     * @author xyz
     *
     */  
    package org.public_domain;
    
  5. 现在,重新排列文件内容,如下所示:

    /**
     * 
     */
    /**
     * @author xyz
     *
     */  
    @NonNullByDefault  
    package org.public_domain;  
    import org.eclipse.jdt.annotation.NonNullByDefault;
    

    ……或者像这样……

    /**
     * 
     */
    /**
     * @author xyz
     *
     */  
    @org.eclipse.jdt.annotation.NonNullByDefault
    package org.public_domain;  
    
  6. 享受 eclipse @NonNullByDefault 的美妙之处

我的挑战是弄清楚我要将注释放在包声明之上。并将NonNullByDefault 注释导入包声明之后。对我来说,这并不直观。

希望这可以节省其他人的时间,因为我已经结束了追逐这条特殊的道路。

于 2013-06-14T21:29:23.387 回答
4

如果您只是想摆脱警告并忽略此功能,因为您没有使用它,您可以简单地在 Eclipse 首选项中禁用它:

Window > Preferences > Java > Compiler > Errors/Warnings > Null analysis > Missing '@NonNullByDefault' annotation on package = [Ignore]

于 2014-01-28T20:00:19.167 回答
2

请参阅源代码或 JavaDocs:

Note that for applying an annotation to a package a file by the name
package-info.java is used.

和:

@Target({PACKAGE,TYPE,METHOD,CONSTRUCTOR})
于 2012-05-16T18:31:49.890 回答