为了账号安全,请及时绑定邮箱和手机立即绑定

为什么要“避免方法重载”?

为什么要“避免方法重载”?

为什么Jorge Ortiz建议避免方法重载?
查看完整描述

3 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

Gilad和Jason(重新命名)给出的原因都是避免过载的很好理由。吉拉德(Gilad)的原因集中在为什么重载通常是有问题的,而杰森(Jason)的原因集中在为什么在其他Scala功能中它是有问题的。


在Jason的列表中,我要补充一点,重载与类型推断的交互作用很差。考虑:


val x = ...

foo(x)

推断类型的x更改可能会更改foo调用哪个方法。该值的x需求不会改变,只是推断类型的x,这可能发生的各种原因。


由于给出的所有原因(还有更多我确定会忘记的原因),我认为应尽量少使用方法重载。


查看完整回答
反对 回复 2019-10-16
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

我认为建议不是特别针对scala的,而是针对OO的(到目前为止,我知道scala应该是OO和功能之间的最佳选择)。


覆盖是好的,它是多态性的核心,并且是OO设计的核心。


另一方面,过载更成问题。使用方法重载很难辨别哪个方法将被真正调用,并且确实经常引起混淆。也很少有理由说明为什么确实需要重载。大多数时候,可以用另一种方法解决问题,我同意超载是一种气味。


这里的一篇文章很好地解释了“超载是混乱的根源”的含义,我认为这是不鼓励这样做的主要原因。它适用于Java,但我认为它也适用于Scala。


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 530 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信