scala – 使用`extends`调用超类型方法,但不能使用自我类型
发布时间:2020-12-16 10:04:32 所属栏目:安全 来源:网络整理
导读:考虑: trait SuperBar { def superBarMethod = ??? }trait Bar extends SuperBartrait FooWithSelfType { this: Bar = super.superBarMethod // error: value superBarMethod is not a member of AnyRef}trait FooWithExtends extends Bar { super.superBar
考虑:
trait SuperBar { def superBarMethod = ??? } trait Bar extends SuperBar trait FooWithSelfType { this: Bar => super.superBarMethod // error: value superBarMethod is not a member of AnyRef } trait FooWithExtends extends Bar { super.superBarMethod } 这种限制是由于一些潜在的实现缺点,还是实际上是出于某种原因设计的? 我看到这个的方式是,如果已知这是Bar类型,并且已知Bar是SuperBar的子类型,那么应该允许在其上调用任何SuperBar方法. 解决方法
FooWithSelfType可能知道它是一个Bar,但它实际上并不是FooWithSelfType的继承层次结构的一部分,因此除了显式属于其继承层次结构的super之外,它不能访问super.如果你有
trait Baz extends SuperBaz { this : Bar => /* ... */ } 如果SuperBaz和SuperBar都有可能,你怎么知道super指的是什么? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |