3

次のようなコード行があります。

String someString = "something"; if (Foo.SOME_CONSTANT_STRING.equals(someString))

違反の結果:「デメテルの法則(静的プロパティへのアクセス)の潜在的な違反」

ここで推奨されるアプローチは何ですか?

(編集:コード例を変更しました)

4

4 に答える 4

2

静的変数へのアクセスに関する問題は、テストが困難な外部状態をクラスに強制していることです。次のようなクラス変数を介してアクセスする必要があります。

private final Foo SOME_CONSTANT = Foo.SOME_CONSTANT_STRING;
public void doSomething(){
    String someString = "something";
    if (SOME_CONSTANT.equals(someString)){
        doTheWave();
    }
}

SOME_CONSTANT の getter を使用すると、関数の「初期状態」をより正確にテストできます。

于 2016-11-02T08:00:33.057 に答える
1

あなたは書くべきです

if ("hello".equals(Foo.SOME_CONSTANT_STRING))

PMDが知る限り、そうではないことHelloは確かです。nullFoo.SOME_CONSTANT_STRING

また、ウィキペディアのデメテルの法則に関するページを参照して、理解を深めてください。

于 2015-10-12T12:06:25.603 に答える