web-dev-qa-db-ja.com

なぜ関数の引数をfinalとして宣言するのですか?

私は現在、Samsが出版した「Teach Yourself Android Application Development in 24 Hours」という本を読んでいます。私はJavaが比較的新しいので、Android =またはそれ以外。ActionScript3には非常に堅実な背景があり、Javaと十分な類似性があるため、言語自体を把握するのは難しくありませんが、その理論的根拠についてはまだ疑問があります。本のコードサンプルの一部の背後にあります。たとえば、次の関数は、9時間目のサンプルコードに付属しています。

private void processScores(final TableLayout scoreTable, 
      XmlResourceParser scores) throws IOException, XmlPullParserException{

この関数シグネチャでは、作成者はscoreTable引数をfinalとして宣言しています。私は彼らがこれをした理由について少し困惑しています。関数の引数scoreTableに新しい値を割り当てようとすることさえ考えられません(ActionScriptでは悪い習慣と見なされています)。さらに、実世界でこれを行う人は実際にはいませんでしたJava AS3に調査または移植しました。

Android開発について、特定の関数の引数を最終的なものとして宣言することが必要になるような特定の何かがありますか?

TableLayoutオブジェクトは最終的に宣言されていますが、XmlResourceParserではないのはなぜですか?

56
scriptocalypse

引数finalをマークする主な理由は2つあります。まず、匿名の内部クラスで引数を使用する場合は、finalのマークを付けて、そのクラスで参照できるようにする必要があります。これは実際には、引数にfinalをマークするための非常に一般的な使用例です。

引数finalをマークする他の一般的な理由は、誤って引数を上書きしないようにすることです。引数を実際に変更したくない場合は、おそらくshouldfinalとマークして、実際に変更すると、コンパイル時にエラーが発生するのではなく、実行時にコードにバグがあることがわかります。

89
templatetypedef