【问题标题】:Android Studio falsely marks conditionals as always trueAndroid Studio 错误地将条件标记为始终为真
【发布时间】:2020-11-23 02:26:12
【问题描述】:

我有一个打算被子类化的类。有一个变量和一个查看变量的方法:

protected int base = 10;

private void rebuildDisplay() {
    if (base == 10) {
        dealWithBase10YadaYada(X);
    } else {
        dealWithOtherBase(X, base);
    }
}

Android Studio 将 if (base == 10) 语句标记为 Condition 'base == 10' is always 'true'

但事情是这样的:即使base 在我的类中总是 10,我的子类会将 base 更改为其他值。所以base == 10 并不总是正确的。

有没有办法告诉 AS 不要对受保护或公共变量做出假设?我应该完全禁用这个测试吗?如果是,怎么做?哎呀,我应该报告错误吗?

【问题讨论】:

    标签: java android-studio intellij-idea android-studio-4.0


    【解决方案1】:

    这是一个问题(不是错误),因为它违反封装并将您的类实现与该变量联系起来。假设有一种更有效的方法可以在不使用 base 的情况下做任何你想做的事情;你不能改变你的代码,因为用户依赖基础,它会破坏代码。

    如果您需要,setBase() 方法可以更改其内部工作原理。

    您可能可以更改 lint 设置。

    【讨论】:

    • 所以基本上,与子类共享受保护的变量通常是个坏主意?我可以看到这背后的逻辑。我想可以很容易地添加一个 setBase() 方法。我已经对我的应用程序进行了几十次更改,以使 Android Studio 满意。 (从 Eclipse 移植不是一件容易的事。)
    猜你喜欢
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多