2013-08-10 5 views
13

私は効果的なJavaとの小さな衝突があります。一方では、最終修飾語を使用することを強く推奨します。また、foreachループの使用を推奨します。要素は、最終的には良いように見えます使用して、その後変更することが予想されていない場合は各ループの最後の内部を使用してください

for (final element e : list) { 
    // do whatever. 
} 

は、しかし、私はこのようなどのコード、どこでも、コードのどの部分を見ていません。なぜそれほど一般的ではないのですか?

+1

いつも使っています。他の人は、コードを混乱させていると言っているので、それを使用しません。このタイプのループを「拡張ループ」と呼びます。 – Obicere

+0

いつも使っています。しかし、私は両方のキャンプに同意する傾向があります。参照を再割り当てしたくない場合は、 'final'、periodを使用してください。しかし、実際には*コードをたくさん乱雑にしています。私は*良い*方法で書かれたコードの大きな塊を見たが、残念ながら過度に冗長に見える。残念ながら、スカラに移動する準備ができていない限り、両方のキャンプを楽しめるシンプルなものはありません...;) –

答えて

5

「コードノイズ」のために使用されていません。より多くの「正しい」ながら、それは読みにくくだから、

finalキーワードは、などなど、すべてのメソッドのパラメータを使用する必要がありますが、そうではありません。

0

基本的に、要素はforループの範囲内で最終的になります。それほど多くは得られません。

+0

これは 'Runnable'の場合には非常に便利で、上書きによる論理エラーを防ぐのに役立ちます間違った変数 – chrylis

+0

特に、 '最終'変数が 'for-each'ループ内でキーとして使用されている場合、別のスレッドで同時に書き込むことができるコレクションにアクセスする場合に発生します。 –

7

通常、開発者はデフォルトをそのまま使用し、必要なときにのみコードを追加します。すなわち、書くことのできる最短のコードはこれまでより簡単です。講義劇場を考えて、何かをしたら手を挙げてください。そうしないと手を上げるように求めます。半分ほどの部屋はまったく投票しません。

私見デフォルトでは、最終的なされている必要がありますし、変更できる値のキーワードvarを持っているでしょう。このようにして、より多くのフィールドが最終的になります。

この特定のケースでは、私は方法は、あなたが、変数が変更されたか否かを推論できることを十分に短くする必要があります基づいてローカル変数は、最終的なことはありません。これを簡単に解決できない場合は、ループ/方法が複雑すぎます。フィールドについて

しかし、私は、使用されるかもしれないすべてのコードを読み取ることは容易ではないとして、彼らはプライベートではありませんESPの場合は、可能な限りこれらは、最終的な作りをお勧めしません。

2

最終的なキーワードを配置できる場所がたくさんあります。一般的な例はメソッドパラメータです。このコードスニペットを見てください:

public static long pow_mod(final long base, final long exponent, final long mod) { 
    // body 
} 

コードの行を80文字後に区切る別の規則があります。この宣言はまだ字下げされていません(クラス内にある必要があります)、それはすでにその量よりも長くなっています。 Javaは非常に冗長な言語なので、コードをさらに混乱させる必要はありません。特にローカル変数をfinalにすることは何も得られていないためです。

関連する問題