gpt4 book ai didi

Java - OnClickListener 中的最终变量要求

转载 作者:行者123 更新时间:2023-12-04 05:52:58 27 4
gpt4 key购买 nike

我有一个程序,它有一个用户可以编辑的文本框。当用户按下按钮时,会创建一个对话框,显示用户的文本和确认“是/否”选项。

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的范围增加?

最佳答案

Does the final keyword just ensure the value isn't changed elsewhere, allowing the onClickListener to store the value of IP, knowing it will still be true? is the scope of IP increased?



从某种意义上说,是的(尽管这实际上是“范围”而不是“范围”:“范围”仍然只是 IP 的声明和函数末尾的 } 之间的程序文本) .

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

关于Java - OnClickListener 中的最终变量要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9857394/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com