为什么 IntelliJ 的检查器会突出显示这段代码?
Why is IntelliJ's inspector highlighting this code?
IntelliJ 似乎认为我的代码存在潜在错误,我不太明白为什么。这与 Nonnull
注释有关;我告诉 IntelliJ 有些字段不能为 null,我确保它们永远不会被允许为 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 的检查器会在 setId(Long)
方法原型的 id
参数上发出警告,警告我 id
的 class 字段是用 Nonnull
注释。尽管我在方法主体中手动检查 null 并在需要时处理它,但还是如此。 Something#id
永远不会通过此方法变为 null。
但是,如果我将方法更改为这样,检查警告将完全消失:
public Something setId(Long id) {
if (id != null)
this.id = id;
else
this.id = DEFAULT_ID;
return this;
}
理论上,这两种实现实际上是相同的;事实上,出于文体目的,IntelliJ 建议在我使用 if-else 方法时使用三元运算符。为什么 IntelliJ 会对第一个实现产生警告——使用三元运算符——而不是第二个?这只是代码检查员的疏忽,还是我在这里遗漏了一些重要的东西?可以通过抑制 "NullableProblems" 来抑制警告,但我想确保在这里使用三元运算符没有问题。有什么建议吗?
这看起来像是一个错误。
我在 JetBrains 跟踪器中为您创建了一个问题。
Vote/comment 这里:https://youtrack.jetbrains.com/issue/IDEA-178172
IntelliJ 似乎认为我的代码存在潜在错误,我不太明白为什么。这与 Nonnull
注释有关;我告诉 IntelliJ 有些字段不能为 null,我确保它们永远不会被允许为 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 的检查器会在 setId(Long)
方法原型的 id
参数上发出警告,警告我 id
的 class 字段是用 Nonnull
注释。尽管我在方法主体中手动检查 null 并在需要时处理它,但还是如此。 Something#id
永远不会通过此方法变为 null。
但是,如果我将方法更改为这样,检查警告将完全消失:
public Something setId(Long id) {
if (id != null)
this.id = id;
else
this.id = DEFAULT_ID;
return this;
}
理论上,这两种实现实际上是相同的;事实上,出于文体目的,IntelliJ 建议在我使用 if-else 方法时使用三元运算符。为什么 IntelliJ 会对第一个实现产生警告——使用三元运算符——而不是第二个?这只是代码检查员的疏忽,还是我在这里遗漏了一些重要的东西?可以通过抑制 "NullableProblems" 来抑制警告,但我想确保在这里使用三元运算符没有问题。有什么建议吗?
这看起来像是一个错误。
我在 JetBrains 跟踪器中为您创建了一个问题。
Vote/comment 这里:https://youtrack.jetbrains.com/issue/IDEA-178172