假设下一节课
interface Thing {
void doSomething();
}
public class Test {
public void doWork() {
//Do smart things here
...
doSomethingToThing(index);
// calls to doSomethingToThing might happen in various places across the class.
}
private Thing getThing(int index) {
//find the correct thing
...
return new ThingImpl();
}
private void doSomethingToThing(int index) {
getThing(index).doSomething();
}
}
Intelli-J 告诉我,我违反了 demeter 定律,因为 DoSomethingToThing 正在使用函数的结果,并且据说您只能调用字段、参数或对象本身的方法。
我真的必须做这样的事情吗:
public class Test {
//Previous methods
...
private void doSomething(Thing thing) {
thing.doSomething();
}
private void doSomethingToThing(int index) {
doSomething(getThing(index));
}
}
我觉得这很麻烦。我认为demeter的法则是一个班级不知道另一个班级的内部,而是getThing()
同一个班级!
这真的违反了德米特法则吗?这真的是在改进设计吗?
谢谢你。