【发布时间】:2020-11-07 08:45:28
【问题描述】:
我试图理解得墨忒耳定律。这个例子(取自《实用程序员》一书)让我很困惑。任务是根据得墨忒耳法则确定显示的方法调用是否允许。
public void showBalance(BankAccount acct) {
Money amt = acct. getBalance() ;
printToScreen(amt .printFormat()) ;
}
针对这个任务,写着它违反了得墨忒耳定律,但我不明白为什么? 根据得墨忒耳定律,对象 O 的方法 M 只能调用以下方法:
- Object O 本身的方法(因为你可以自言自语)
- 作为参数传递给 M 的对象方法
- 实例变量中保存的对象的方法
- 在方法 M 中本地创建的对象的方法
- 静态字段的方法
对象amt 是在方法showBalance(BankAccount acct) 中本地创建的,我们在该对象上调用方法getBalance(),这是根据规则4 允许的。这让我感到困惑。
【问题讨论】:
-
它调用的方法
printToScreen来自哪里?根据这些规则,这似乎是方法体中唯一潜在的异常值。 -
printToScreen 方法通过参数 acct.getBalance().printFormat() 有效调用。这有帮助吗?
-
@TimHunter
printToScreen方法在同一个类中声明,其中方法showBalance被声明。根据得墨忒耳法则,允许在showBalance方法中调用该方法。
标签: java oop law-of-demeter