IntelliJ似乎认为我的代码存在潜在的错误,我不明白为什么。这与Nonnull
注释有关;我告诉IntelliJ,有些字段不能为空,我确保它们永远不会变为null,但IntelliJ不喜欢它,完全相同。为什么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的检查产生的setId(Long)
方法原型的id
参数警告,警告我说,对于id
类字段都标注有Nonnull
。尽管如此,我仍然需要手动检查方法&中的空值。通过这种方法,Something#id
永远不会变为空。
但是,如果我改变的方法是这样的,检查警告消失完全:
public Something setId(Long id) {
if (id != null)
this.id = id;
else
this.id = DEFAULT_ID;
return this;
}
从理论上讲,这两种实现方式实际上是相同的;实际上,IntelliJ建议在使用if-else方法时使用三元运算符,以达到文体目的。为什么IntelliJ会在第一次执行时发出警告 - 使用三元运算符 - 但不是第二次?这只是代码检查员的疏忽,还是我错过了重要的东西?警告可以通过抑制“NullableProblems”来抑制,但是我想确保在这里使用三元运算符没有问题。有什么建议?
实际上,我所看到的并不是第一个发出任何警告。然后再次,我被通知'org.jetbrains.NotNull'将被用来代替'@ Nonnull'。 – Makoto
@Makoto你提出一个好点;我之前将IDE配置为使用javax注释。我将不得不尝试恢复该设置并查看JetBrains品牌注释的行为是否有所不同。 – nasukkin