我正在做一些应该是微不足道的事情——从一个属性中检索一个枚举值,并将它与 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/