デメテルの法則について私が理解したのは:
メソッドはそのクラス内の他のメソッドを直接
呼び出すことができます メソッドはそれ自身のフィールドのメソッドを直接呼び出すことができます (ただし、フィールドのフィールドではできません)
メソッドがパラメーターを受け取る場合、メソッドはそれらのパラメーターのメソッドを直接呼び出すことができます。
メソッドがローカル オブジェクトを作成すると、そのメソッドはローカル オブジェクトのメソッドを呼び出すことができます。
ただし
、グローバル オブジェクトでメソッドを呼び出すべきではありません (ただし、パラメーターとして渡すことはできますか?)
a のクラス以外のクラスにメッセージ a.getB().getC().doSomething() のチェーンを持つべきではありません。
私の方法の1つで私がやっていることはこれです:
final ServiceStatusBean serviceStatusBean = new ServiceStatusBean();
serviceStatusBean.setName("someName");
serviceStatusBean.setApiVersion("someVersion");
私の serviceStatusBean インスタンスはメソッド内でローカルに作成され、そのセッターを呼び出しています。私の理解では、デメテルの法則で問題ありません。しかし、PMD によると、セッターを呼び出す回線でデメテルの法則に違反しています。
警告 - 「デメテルの法則に違反する可能性があります (ローカルで作成されていないオブジェクト)」
これらの PMD 警告の背後にある理由を理解できません。説明はありますか??
PMD の詳細:
プラグイン バージョン - 4.0.5.v20141105-1906
PMD バージョン - 5.2.1