为什么我们需要初始化意图的关键?

时间:2013-11-03 14:18:29

标签: android android-intent

我们的意图通过名为extras的键值对将数据从一个活动传递到另一个活动。

我们在使用public static final String mykey= "something";

将密钥传递给意图之前初始化密钥(即将其声明为常量并为其指定一些内容,例如intent.putExtra(mykey, myvalue);

我的问题是为什么我们需要在声明时为键指定一个值?这个价值有什么用? = "something"

中“public static final String mykey= "something";”的用途是什么?

我发布了一个相关的问题,一个受人尊敬的人(由于他们有价值的答案而受到尊重)说,当宣布决赛时,必须分配一个值,以便知道常数是什么。听起来像常识。

但是如果我只是声明一个常量的public static final String a;编译器根本不会抱怨,这意味着只要在使用之前初始化一个值,就必须初始化带有值的最终变量。

相关答案表示赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我假设IntentMap支持。

如果你有一个未初始化的变量作为键,这将意味着该值基本上丢失:没有办法检索它,因为没有与之关联的键(尽管我认为根本不可能插入)地图中的null键。)

您不必将此键实际分配给变量:intent.putExtra("somekey", somevalue);的效果一样好。

这只是确保您不会意外使用错误的密钥。

为了说明为什么使用最终变量是有益的:

public static void main(String[] args) {
    Map<String, Integer> someMap = new HashMap<>();
    String theValue = "X";
    someMap.put(theValue, 5);
    System.out.println("Variable: " + theValue);
    System.out.println("Map: " + someMap.get(theValue));

    theValue = "Y";
    System.out.println("Variable: " + theValue);
    System.out.println("Map: " + someMap.get(theValue));
    System.out.println("ByValue: " + someMap.get("X"));
}

输出:

  

变量:X
  地图:5

     

变量:Y
  地图:null
  ByValue:5

如果theValue是最终的,则无法重新分配,并且从基础Map获取值时不会有任何问题。