加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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指的是什么?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读