测试捆绑包中某个值是否存在的更好方法?

Better Way to Test Presence of a Value in a Bundle?

我有一个activity玩游戏。用户可能正在从保存的状态恢复或开始新游戏。如果要恢复,则要恢复的游戏的标识符将传递到包中的 activity。如果是新游戏,捆绑包的那部分不会通过,因此是 null。我目前实现如下...

Bundle bundle = this.getIntent().getExtras();

        int GameNumberToResume;
        boolean StartNewGame = false;
        try 
        {
            GameNumberToResume = bundle.getInt("GameToResume"); 
        } 
        catch (Exception e)
        {
            System.out.println("Exception Catch, so we start a new game.");
            StartNewGame = true;
            System.out.println((e.toString()));
        }

...而且有效。如果我们要开始一个新游戏或恢复已保存的游戏,StartNewGame 会驱动决策树;如果我们正在恢复,GameNumberToResume 有要恢复的游戏 ID。但是,Android Studio 抛出软警告...

Variable 'GameNumberToResume' is assigned but never accessed.

...因为在决策树的部分,当我需要恢复游戏的价值时,我直接通过 bundle.getInt("GameToResume") 从捆绑包中提取它。

所以这是我的问题:我应该做些什么不同的事情?我可以通过在下游引用变量 GameNumberToResume 而不是将其从包中拉出来使警告消失,但在我看来这不会改变任何东西。警告的目的是指出我在浪费内存,如果我这样做,我仍然有两件事在范围内,它们都包含相同的值。

我知道在这种特定情况下它可能无关紧要,但它很简单,可以遵循并说明我对如何高效编码的理解存在一个普遍漏洞 Android。

这里不要使用try-catch。你可以像 int GameNumberToResume=Integer.MAX_VALUE 这样初始化游戏号码。然后删除try-catch。只需使用 if(xx==Integer.MAX_VALUE).
在我看来,try-catch只能用于未知错误或不可预测的情况。在这里,你什么都知道。

结帐

bundle.containsKey ("GameToResume");

it will return whether this key is there or not in bundle.

你可以利用getInt第二个参数来设置默认值,像这样。

Bundle bundle = this.getIntent().getExtras();

// Don't forget NullPointerException
if(bundle != null){
    final int IMPOSSIBLE_VALUE = -1; // default value
    boolean startNewGame = false;

    int gameNumberToResume = bundle.getInt("GameToResume", IMPOSSIBLE_VALUE);
    if(gameNumberToResume != IMPOSSIBLE_VALUE){
        startNewGame = true;
        // continue ..
    }    
}