次のようなコード行があります。
String someString = "something";
if (Foo.SOME_CONSTANT_STRING.equals(someString))
違反の結果:「デメテルの法則(静的プロパティへのアクセス)の潜在的な違反」
ここで推奨されるアプローチは何ですか?
(編集:コード例を変更しました)
次のようなコード行があります。
String someString = "something";
if (Foo.SOME_CONSTANT_STRING.equals(someString))
違反の結果:「デメテルの法則(静的プロパティへのアクセス)の潜在的な違反」
ここで推奨されるアプローチは何ですか?
(編集:コード例を変更しました)
静的変数へのアクセスに関する問題は、テストが困難な外部状態をクラスに強制していることです。次のようなクラス変数を介してアクセスする必要があります。
private final Foo SOME_CONSTANT = Foo.SOME_CONSTANT_STRING;
public void doSomething(){
String someString = "something";
if (SOME_CONSTANT.equals(someString)){
doTheWave();
}
}
SOME_CONSTANT の getter を使用すると、関数の「初期状態」をより正確にテストできます。
あなたは書くべきです
if ("hello".equals(Foo.SOME_CONSTANT_STRING))
PMDが知る限り、そうではないことHello
は確かです。null
Foo.SOME_CONSTANT_STRING
また、ウィキペディアのデメテルの法則に関するページを参照して、理解を深めてください。