当前位置: 首页 > 知识库问答 >
问题:

为什么IntelliJ的检查员突出显示这个代码?

湛宝
2023-03-14

IntelliJ似乎认为我的代码有一个潜在的错误,我不太明白为什么。这与Nonnull注释有关;我告诉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注释。这是在尽管我手动检查null在身体的方法

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

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

理论上,这两种实现实际上是相同的;事实上,IntelliJ建议在我使用if-ther方法时使用三元运算符,以达到文体目的。为什么IntelliJ会在第一个实现(使用三元操作符)上产生警告,而不是第二个?这只是代码检查器中的一个疏忽,还是我错过了一些重要的东西?可以通过抑制“Nullable问题”来抑制警告,但是我想确保在这里使用三元运算符没有问题。有什么建议吗?

共有1个答案

龙玺
2023-03-14

这看起来像个虫子。

我在JetBrains tracker中为您创建了一个问题。

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

 类似资料:
  • 错误:无法找到或加载主类MyGridLayout.MyGridLayout C:\users\home\AppData\local\netbeans\cache\8.2\executor-snippets\run.xml:53:Java返回:1构建失败(总时间:0秒)

  • 我尝试使用C类继承来解决违反Liskov替换原则的问题,但无法复制与Java程序演示的LSP冲突相同的问题。Java程序的源代码可以在这个页面上找到。违规会导致页面上描述的错误。下面是我用C语言翻译的代码: 答案是矩形类预期的50。我对Java的翻译是错误的还是这与Java和C实现类的区别有关?我的问题是: 是什么导致了这种行为差异(在引擎盖下/我的代码问题)? LSP违规的Java示例可以在C中

  • 我在中使用带有4.1版本模拟器的android最新版本sdk。一切都很好。但是在我的中,对于任何应用程序的每次运行,我都会得到以下语句。 即使在Hello world应用程序中,我也得到相同的logcat输出。我没有在我的应用程序中使用多线程。有人能告诉我为什么在我的logcat中得到这些日志。 这是我的密码 在我的异步任务中,我从服务器获取JSONArray,解析它并列出。

  • 我正在研究从EclipseScalaIDE切换到Intellij15Scala插件。 我可以在Messages工具中看到编译错误的报告,但在项目树中看不到任何包含错误的源文件的突出显示。 这个功能不可用吗?如果没有,你如何应对?我是不是被日食宠坏了,应该学会“忍受”呢? 更新此问题不同于IntelliJ-显示错误的位置,因为: 这个问题与文件夹/文件树视图中文件的视觉指示器有关

  • 我在IntelliJ IDEA2020.1.2(终极版)中打开一个spring boot项目,并在实体中打开许多错误突出显示,例如: 无法解析表“角色” 类“RolesEntity”应具有[public,protected]无arg构造函数 无法解析表“user_roles” 但是当我在IntelliJ IDEA2019.3.3(社区版)这样的旧版本中打开我的项目时,我就看不出这个问题了。 Int

  • 我在Windows和OSX上使用IntelliJ开发一个包含ScalaJS部分的Play framework项目。该项目使用Activator在两个系统上正确构建和运行。 然而,Windows上的IntelliJ编辑器在我的源代码中下划线,而在OSX上却没有。如果我导航到与错误相关的库源代码,我会找到不同的文件。例如,在Windows上,它可能转到: