为什么IntelliJ的检查员会突出显示此代码?

时间:2017-08-28 16:30:14

标签: java intellij-idea code-inspection

IntelliJ似乎认为我的代码存在潜在的错误,我不明白为什么。这与Nonnull注释有关;我告诉IntelliJ,某些字段不能为空,我确保它们永远不会被允许变为null,但IntelliJ不喜欢它,完全相同。

以下是相关代码的示例。

import javax.annotation.Nonnull;

public class Something {
     static final Long DEFAULT_ID = -1L;

     @Nonnull
     public Long id;

     public Something() {
         id = DEFAULT_ID;
     }

     @Nonnull
     public Long getId() {
         return this.id;
     }

     public Something setId(Long id) {
         this.id = id != null ? id : DEFAULT_ID;
         return this;
     }
}

当我这样做时,IntelliJ的检查员会对id方法原型的setId(Long)参数发出警告,警告我id的类字段已注明{{1} }。尽管我在方法的主体中手动检查空值,但这仍然是如果需要,处理它。 Nonnull永远不会通过此方法变为null。

但是,如果我将方法改为这样,检查警告就会完全消失:

Something#id

理论上,两种实现方式实际上是相同的;实际上,IntelliJ建议在使用if-else方法时使用三元运算符,以用于样式目的。为什么IntelliJ会在第一次实现时产生警告 - 使用三元运算符 - 而不是第二个?这只是代码检查员的疏忽,还是我错过了重要的事情?可以通过抑制“NullableProblems”来抑制警告,但我想确保在这里使用三元运算符没有问题。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

这看起来像个错误。

我在JetBrains跟踪器中为您创建了一个问题。

在此投票/评论:https://youtrack.jetbrains.com/issue/IDEA-178172