如何在包上使用NonNullByDefault

时间:2012-05-16 17:42:47

标签: java eclipse compiler-warnings

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

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

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

或者我只是将@NonNullByDefault添加到包中的任何类,然后它对该包中的所有bean都有效?或者我是否必须在pakage中创建一些元信息文件以添加包选项?我必须是盲人,因为我在网上找不到任何帮助....

一个小例子很棒。

3 个答案:

答案 0 :(得分:13)

<强>要点:
获得上述建议对我来说并不直观。我刚刚想出的实际解决方案也不是。在package-info.java文件中:
 一个。 将注释放在包声明
上面  湾在包声明

之后输入NonNullByDefault注释

<强>详细信息:
我不知道我是否是唯一一个阅读上述答案并且无法弄清楚如何使其工作的人。所以,为了更清楚,这里是我采取的(非显而易见的,直观的)步骤,以便最终在Eclipse-Juno中工作:

  1. 在Package Explorer中,转到显示警告(或错误)消息的根Java包,该消息以“尚未为包指定默认空值注释... ”开头 - 对于此示例,请假设包名称为“org.public_domain”
  2. 在Java包上,激活右键菜单并选择“新建 - >>包”选项 - 是的,我知道你的包已经存在,认为它是一个日食特质 - 它是不会对现有的包裹做任何事情
  3. 当出现“ New Java Package ”对话框时,选中“创建package-info.java ”复选框,然后单击“完成”
  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. 享受日食@NonNullByDefault

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

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

答案 1 :(得分:4)

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

窗口&gt;偏好&gt; Java&gt;编译器&gt;错误/警告&gt;空分析&gt;包 = [忽略]

缺少'@NonNullByDefault'注释

答案 2 :(得分:2)

请参阅source code或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})