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#),但对这个问题的回答表明我对此的理解是合理的.我正在犯一些愚蠢的错误吗?
好悲伤。在按照建议创建单独的方法并发现问题出在其他地方之后,我进一步查看了代码。完整的方法是;
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语句确实得到了评估。感谢您的评论,我认为这是值得离开的(尽管确实是一个愚蠢的错误),因为其他人可能会因此而被抓住。
| 归档时间: |
|
| 查看次数: |
524 次 |
| 最近记录: |