Android Studio使用枚举比较报告"无法访问的代码"

Cra*_*ham 6 java enums android

我正在做一些应该是微不足道的事情 - 从属性中检索枚举值并将其与if语句中的枚举常量进行比较.但Android Studio声称该true案例是无法访问的代码,无法编译.

该块是:

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();
}
Run Code Online (Sandbox Code Playgroud)

在额外的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;
Run Code Online (Sandbox Code Playgroud)

变种我试过,其中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))
Run Code Online (Sandbox Code Playgroud)

我是Java新手(更熟悉C#),但对这个问题的回答表明我对此的理解是合理的.我正在犯一些愚蠢的错误吗?

Cra*_*ham 0

好悲伤。在按照建议创建单独的方法并发现问题出在其他地方之后,我进一步查看了代码。完整的方法是;

public void onScanButtonPress(@ButtonFlashMode int button)
{
    ScanState.ScanModeEnum newMode;
    @ButtonFlashMode int btnMode = 0;

    switch (button)
    {
        case FLASH_BIKE:
            newMode = ScanState.ScanModeEnum.SCAN_BIKE;
            btnMode = FLASH_BIKE;

        case FLASH_PERSON:
            newMode = ScanState.ScanModeEnum.SCAN_PERSON;
            btnMode = FLASH_PERSON;

        default:
            //Unhandled.
            return;
    }

    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();
    }
}
Run Code Online (Sandbox Code Playgroud)

break由于我忘记在 switch 的情况下放置语句,因此它总是会在if评估之前返回。因此,它永远不会评估为true,因此错误是正确的 - 如果有误导性,因为它意味着(至少对我而言!)该if语句确实得到了评​​估。感谢您的评论,我认为这是值得离开的(尽管确实是一个愚蠢的错误),因为其他人可能会因此而被抓住。