public class Foo {
/**
* This example will result in two violations.
*/
public void example(Bar b) {
// this method call is ok, as b is a parameter of "example"
C c = b.getC();
// this method call is a violation, as we are using c, which we got from B.
// We should ask b directly instead, e.g. "b.doItOnC();"
c.doIt();
// this is also a violation, just expressed differently as a method chain without temporary variables.
b.getC().doIt();
// a constructor call, not a method call.
D d = new D();
// this method call is ok, because we have create the new instance of D locally.
d.doSomethingElse();
}
}
LawOfDemeter
你的
list
是一个参数吧,LawOfDemeter
規則是期望你的參數提供方法直接調用,而不使用方法返回的對象(這個對像不是在方法內部創建的),再調用對象的函數,可以參考上面的示例修改。如果無法修改那就把這個規則排除掉吧。這個規則有點苛刻。