0

Androidアプリケーションを作成し、静的分析ツールPMDを実行しました。そして、私が得られないのは、なぜそれが私に警告を与え、この例のように可能な場合はフィールドをfinalと宣言するように言っているのかということです。

final City selectedItem = (City) arg0.getItemAtPosition(arg2);
new RequestSender(aaa).execute(xxx, selectedItem.getId());

内部のAsyncTaskインスタンスを開始するだけです。それを最終的に宣言するのは良いスタイルですか、そしてその理由は何ですか?読みやすくするために、新しいオブジェクトを作成しましたが、PMDはそれが最終的なものであるべきだと言っています。

4

1 に答える 1

1

ここには 2 つの異なる点があります (静的と最終の両方について話している)。

finalに関して、変更しない (オブジェクト自体を変更できる) 参照を作成する場合は、次の 2 つの理由から、final を宣言することをお勧めします。

  • コンパイラが小さなパフォーマンスの最適化を実行できるようにするのに役立ちます
  • あなた (またはあなたの仲間の開発者) が、この参照が変更されないことを理解するのに役立ちます - それは合図を出します。

static (変数の場合、キーワードは構造の種類ごとに異なる意味を持ちます) に関しては、それを囲むクラスのすべてのオブジェクトに対して、cityItems が一意になります。すべてのオブジェクトが同じ値を使用できる場合、それを複製するメリットはありません。繰り返しになりますが、コンパイラ/パフォーマンスの側面だけでなく、シグナルについても考えてください。「静的」のフィールドが表示された場合、それがすべてのオブジェクト間で共有されていることがわかります。追加の情報やドキュメントは必要ありません。

あなたの例では、フィールドはおそらくパブリック静的(共有されている場合)またはプライベート(パブリックまたは「パッケージ保護」フィールドがカプセル化を破っている)のいずれかである必要があります。

于 2013-03-07T08:24:28.170 に答える