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”来抑制警告,但我想确保在这里使用三元运算符没有问题。有什么建议吗?
答案 0 :(得分:1)