java - Android Studio 通过枚举比较报告 "Unreachable Code"

标签 java android enums

我正在做一些应该是微不足道的事情——从一个属性中检索一个枚举值,并将它与 if 语句中该枚举的常量进行比较。然而,Android Studio 声称 true 情况是无法访问的代码,不会编译。

block 是:

if (ScanState.getScanMode() != ScanState.ScanModeEnum.SCAN_IDLE)
{
    //We're already scanning, but user wants to stop.
    stopScanning();
}
else
{
    ScanState.setScanMode(newMode);
    restartScan();
    buttonFlashMode = btnMode;
    buttonFlasher();
}

在额外的 ScanState 类中,我有:

public static ScanModeEnum getScanMode() {
    return scanMode;
}

public static void setScanMode(ScanModeEnum scanMode) {
    ScanState.scanMode = scanMode;
}

public enum ScanModeEnum
{
    SCAN_IDLE,
    SCAN_PERSON,
    SCAN_BIKE,
    SCAN_SEARCH
}

private static ScanModeEnum scanMode = ScanModeEnum.SCAN_IDLE;

我尝试过的变体,Android Studio 声称这些变体都将评估为 false

if(ScanState.getScanMode() == ScanState.ScanModeEnum.SCAN_IDLE)
if(ScanState.getScanMode().compareTo(ScanState.ScanModeEnum.SCAN_IDLE)!=0)
if(ScanState.ScanModeEnum.SCAN_IDLE == ScanState.ScanModeEnum.SCAN_IDLE)
if(ScanState.ScanModeEnum.SCAN_IDLE.equals(ScanState.ScanModeEnum.SCAN_IDLE))

我是 Java 的新手(更熟悉 C#),但对 this question 的回答表明我对此的理解是正确的。我犯了什么愚蠢的错误吗?

最佳答案

您是否尝试过对此进行调试并验证该区 block 从未真正到达过?

我同意这是一个非常奇怪的情况。如果它仍然存在,我可以建议将枚举换成 int 常量,并对它们进行检查。这不是真正的修复,更像是一种解决方法,但至少它可以暂时解除对您的阻止。

关于java - Android Studio 通过枚举比较报告 "Unreachable Code",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31583594/

相关文章:

c# - 从枚举中获取 DescriptionAttribute

java - 在 Java 中设计规则引擎的有效设计模式/风格是什么?

java - 如何在 Java 中撤销 Google API 刷新 token ?

java - Openshift 上 Tomcat 7.0.39 上的 Websocket

java - 如何为基于 Apache HttpComponents 的服务器添加 Keep-Alive header ?

Android:带有自定义字体的文本周围的垂直空间

java - 我如何分析一个非常大的 Java webapp?

android - 每天在特定时间设置重复闹钟

安卓按键问题

c++ - 将现有的 C++ 枚举包含到命名空间