java - Intellij Idea 提示 : Condition is always false - can that be true here? (Java)

标签 java intellij-idea control-flow

我有以下代码:

public String testExitPoints() {
    boolean myBoolean = false;
    try {
        if (getBoolean()) {
            return "exit 1";
        }
        if (getBoolean()) {
            throw new RuntimeException();
        }
    } finally {
        myBoolean = true;
    }
    if (getBoolean()) {
        return "exit 2";
    }
    return "exit 3";
}

public static boolean getBoolean() {
    Random rand = new Random();
    return rand.nextInt() > 100;
}

现在 IntelliJ idea 为 getBoolean() 的第二次和第三次调用提供了以下提示:

Condition 'getBoolean()' is always 'false'

根据我的理解,这不是真的,因为 getBoolean() 可以是 truefalse,具体取决于生成的随机数值(value)。我在这里遗漏了什么,还是 IntelliJ Idea 中的错误?

最佳答案

这不是错误。这是一个功能:)

如果您在 IDE 中仔细查看,它会告诉您对 getBoolean() 的第二次和第三次调用始终为 false,但不是第一次。

Idea 假设(在这种情况下是错误的)您的方法是无参数的并称为“get”...,将始终返回相同的值。

如果是这种情况,并且第一个调用为真,则永远不会访问另一个调用(因为返回)。

如果第一个电话是错误的,那么其他电话也是错误的。

IDEA 试图变得聪明 w.r.t.良好的编码实践,但并非万无一失。

如果您将方法更改为具有参数(或重命名它,使其看起来不像 getter)

public  boolean getBoolean(int x) {
    Random rand = new Random();
    return rand.nextInt() > 100;
}

警告将消失(即使您始终使用相同的参数调用)。

(请注意,即使它是一个 getter,如果它用于非 final 字段,它仍然是错误的,因为它可能在多线程环境中发生变化!)

关于java - Intellij Idea 提示 : Condition is always false - can that be true here? (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31829958/

相关文章:

java - 在 Spring Framework 中使用 SPeL 读取系统属性

java - 我可以使用 retryWhen 并在达到限制时返回可观察值吗?

java - JPA规范: filter child entities

java - 如何在 Spring Boot 中的 graphql 突变中从服务器端 api 设置 Cookie?

android - ActionBar 上没有应用程序图标

java - 奇怪的 SQLite 行为 - 非功能性 UPDATE SQLite 方法

javascript - 如何包装异步包函数?

java - 如何通过open api检测IntelliJ的当前主题?

java - Java for循环中的return语句不退出方法

ios - 在 Swift 3 或 4 中检查 if 条件矩阵