ユーザーが編集できるテキストボックスを持つプログラムがあります。ユーザーがボタンを押すと、ダイアログボックスが作成され、ユーザーのテキストが表示され、「はい/いいえ」オプションが確認されます。OnClickListenerの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
は何を追加しますか?たとえば、ダイアログへの参照を保持し、別の方法で表示することを選択した場合はどうなりますか?つまり、上記のメソッドが返されます。では、変数IP
はどうやってくれるのでしょうか?
最終的なキーワードは、値が変更されていないことを保証するだけで、onClickListenerにはIP
の値を格納させることができます。 IP
のスコープは増加していますか?
参照してください:[別の方法で定義された内部クラス内の最終的でない変数を参照できません](http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-内部変数で内部変数を定義する) –
可能な複製[EventHandlerがオブジェクトを最終的に要求する時期と理由](http://stackoverflow.com/questions/2809131/when -and-why-does-an-eventhandler-require-objects-to-be-final) – SoapBox