【问题标题】:IntelliJ null check warningsIntelliJ 空检查警告
【发布时间】:2017-06-26 21:07:11
【问题描述】:

我经常有这样的代码:

protected @Nullable Value value;

public boolean hasValue() { return value != null; }

问题在于,当我像这样进行空检查时:

if (!hasValue()) throw...
return value.toString();

然后 IntelliJ 会警告我可能的 NPE

if (value != null) throw...
return value.toString();

避免此警告。

有没有办法装饰我的 hasValue() 方法,以便 IntelliJ 知道它会执行 null 检查?并且不会显示警告?

【问题讨论】:

  • hasValue 真的那么简单吗?
  • @suppresswarnings( nullcheck ) 注释呢?
  • @SotiriosDelimanolis 是的
  • 您使用的 Intellij-Idea 版本是多少?我的第 14 版没有向我显示此警告(在这种特殊情况下)。
  • @Andremoniy 这是2016.3.4。哦.. 我看到我使用 @Nullable 来装饰值字段的问题 - 如果我删除它,它就会消失。

标签: java intellij-idea annotations jetbrains-ide


【解决方案1】:

Intellij-Jetbrains 是一个非常聪明的 IDE,它本身会为您提供解决许多问题的方法。

请看下面的截图。它建议了您消除此警告的五种方法:

1) 添加assert value != null

2) 用return value != null ? value.toString() : null;替换return语句

3) 用

包围
    if (value != null) {
        return value.toString();
    }

4) 通过添加评论来禁止对该特定语句的检查:

//noinspection ConstantConditions
return value.toString();

5) 至少添加,因为之前@ochi 建议使用@SuppressWarnings("ConstantConditions") 注释,可用于方法或整个类。

要调用此上下文菜单,请使用快捷键Alt+Enter(我认为它们对所有操作系统都很常见)。

【讨论】:

  • 所有这些技术确实阻止了 IntelliJ 发出警告。但是,他们都没有回答确保“IntelliJ 知道它 [hasValue] 进行空值检查”的原始问题。其他一些工具具有更复杂的代码分析并支持后置条件注释@EnsuresNonNullIf,它可以满足原始发布者的要求——但不幸的是,IntelliJ 目前没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 2022-07-26
  • 2017-07-24
相关资源
最近更新 更多