我可以使IntelliJ @NonNull / Nullable注释像Eclipse一样

时间:2018-01-19 20:53:45

标签: java eclipse intellij-idea annotations

要点: 是否有任何方法可以将IntelliJ配置为不向现有的未注释代码添加错误,但绝不允许将null传递给@NonNull参数?

详细信息: Eclipse实际上有3"可空和#34; state,@ NonNull,@ Nullable和Unannotated。

IntelliJ似乎有两种类型的可空,你将Un-annotated视为@NonNull或@Nullable,未注释没有它自己的行为。

如果您有一个大型现有项目并且想要开始使用注释,则所有这三个状态都非常重要。

问题:我是否错过了配置选项,或者说IntelliJ中的注释是全有或全无?

tl; dr :(为什么需要这三种类型)

在eclipse中,Un-annotated将扮演:

  1. @NonNull与其他未注释的项目进行交互时
  2. @Nullable传递给使用@NonNull注释的内容
  3. 第一个是必需的,因此不会在现有的未注释的代码上创建警告,例如" str.length()"

    第二个是,如果您尝试将无类型的潜在null传递给使用@NonNull注释的方法,则会收到警告。

    这种组合允许您通过未经注释的代码缓慢推送注释。

    在Intellij中,一个名为"的选项将未注释的成员和参数视为@Nullable定义了未注释的变量/代码的行为,如果这是关闭的,它们将作为@No-Null,如果它&#39 ;他们是@Nullable。

    打开"视为@ Nullable"如果您假设您的整个代码库都已注释,则选项很棒,但如果您使用的是现有代码,则会在未注释的情况下导致无限警告,如下所示:

    public void test(String s) {
        System.out.println(s.length());
    }
    
    public void callTest(String maybeNull) {
        test(maybeNull);
    }
    

    如果我使用IntelliJ的设置指定未注释应被视为Nullable,则此未注释的代码会收到警告,因为s可以为空并且必须在检查s.length()之前进行空值检查。在我准备添加注释之前,我不想在整个代码中看到这种警告。

    另一方面,如果我采用默认设置,那么当我开始通过更改此行来应用注释时:

        public void test(@NonNull String s) {
    

    它不会导致调用者出现预期的错误,因为IntelliJ假定未注释的maybeNull应该被视为@NonNull。我们绝对希望在这里发出警告,因为MaybeNull实际上可能为null - 否则注释不会为我们做任何事情。

0 个答案:

没有答案
相关问题