Java - OnClickListener中的最终变量要求

时间:2012-03-25 02:14:55

标签: java

我有一个程序,其中包含一个用户可以编辑的文本框。当用户按下按钮时,会创建一个对话框,显示用户的文本并确认'是/否'选项。

public void setIP(View v){
    //get the text inside the editor
    EditText et = (EditText) findViewById(R.id.editTextIP);
    final String IP = et.getText().toString();

    //create dialog 
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Set I.P. to : " + IP + " ?")
           .setCancelable(false)
           .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                    host = IP;
               }
           })
           .setNegativeButton("No", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
               }
           });
    AlertDialog alert = builder.create();
    alert.show();
}

此代码工作正常,但我的第一个版本无法编译。我的IDE抱怨我应该创建字符串IP final,而不是。

这让我思考。 final在这种情况下添加了什么?例如,如果我选择保留对Dialog的引用,并从另一种方法显示它,该怎么办?这意味着上面的方法将返回。那么变量IP如何徘徊?

final关键字是否只是确保其他地方没有更改值,允许onClickListener存储IP的值,知道它仍然是真的吗?是IP增加的范围?

1 个答案:

答案 0 :(得分:3)

  

final关键字是否只是确保其他地方没有更改值,允许onClickListener存储IP的值,知道它仍然是真的吗?是IP增加的范围?

从某种意义上说,是的(虽然这实际上是“范围”而不是“范围”:“范围”仍然只是IP}声明之间的程序文本。在功能的最后)。

实现方面,基本上发生的事情是new DialogInterface.OnClickListener() { ... }有一个名为IP的隐式字段,它在对象构造期间自动初始化。 final修饰符用于通过确保局部变量IP和隐式字段IP继续引用相同来保护单个IP变量的抽象。 String实例。