要点: 是否有任何方法可以将IntelliJ配置为不向现有的未注释代码添加错误,但绝不允许将null传递给@NonNull参数?
详细信息: Eclipse实际上有3"可空和#34; state,@ NonNull,@ Nullable和Unannotated。
IntelliJ似乎有两种类型的可空,你将Un-annotated视为@NonNull或@Nullable,未注释没有它自己的行为。
如果您有一个大型现有项目并且想要开始使用注释,则所有这三个状态都非常重要。
问题:我是否错过了配置选项,或者说IntelliJ中的注释是全有或全无?
tl; dr :(为什么需要这三种类型)
在eclipse中,Un-annotated将扮演:
第一个是必需的,因此不会在现有的未注释的代码上创建警告,例如" 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 - 否则注释不会为我们做任何事情。