0

例:

public enum TestEnum {
    FOO(4), BAR(7);

    public final int externalValue;

    private TestEnum(int externalValue) {
        this.externalValue = externalValue;
    }
}

getExternalValue() メソッドがないことに注目してください。externalValue フィールドは final であるため、変更されるリスクはありません。このようなコードを Sonar で実行すると、「変数 'externalValue' はプライベートでアクセサ メソッドが必要です」というエラーが表示されます。

私がまったくのバカだと仮定して説明してください: なぜ絶対に externalValue のアクセサーを実装して使用する必要があるのですか?

理由を説明するのは難しいですが、Java Bean パターンが巧妙な構造から普遍的な法則へと変わった方法には、なんとなく動揺します。常に必要である必要はないと思います。

4

2 に答える 2

1

この場合、ソナーのルールは単純に間違っています。列挙型が JavaBean 仕様に準拠することさえできません (公開コンストラクターが必要なため)

これは、静的コード アナライザーでは常に発生します。// NOSONARコメントまたは注釈を使用して、特定の警告を選択的に無効にすることができます@SuppressWarnings

于 2013-02-18T12:21:31.990 に答える
0

公式ドキュメントを見たら

すべてのインスタンス final 変数はプライベートに宣言され、それらのアクセサーが定義されます。だから、そうでなければならないのでしょうか?

于 2013-02-18T12:19:20.347 に答える