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

scala – 冲突的嵌套继承特征

发布时间:2020-12-16 19:19:15 所属栏目:安全 来源:网络整理
导读:假设我有以下代码: trait Trait1 { trait Inner { val name = "Inner1" }}trait Trait2 { trait Inner { val name = "Inner2" }}class Foo extends Trait1 with Trait2 { // I want Concrete1 to be a Trait1.Inner not a Trait2.Inner class Concrete1 ext
假设我有以下代码:

trait Trait1 { 
  trait Inner {
    val name = "Inner1"
  }
}

trait Trait2 {
  trait Inner {
    val name = "Inner2"
  }
}

class Foo extends Trait1 with Trait2 {
  // I want Concrete1 to be a Trait1.Inner not a Trait2.Inner
  class Concrete1 extends Inner
  val c = new Concrete1
}

object Obj {
  def main(args: Array[String]): Unit = {
    val foo = new Foo
    println(foo.c.name)
  }
}

当我在Trait1和Trait2中混合时,指向Inner似乎默认为我混合的第二个特征的内部类型;所以当我调用Obj的主要方法时,它会打印Inner2.如何在Foo中引用Trait1.Inner?以下所有三个都给出了编译器错误:

class Concrete1 extends Trait1.Inner
class Concrete1 extends Trait1$Inner
class Concrete1 extends Trait1#Inner

解决方法

代替

class Concrete1 extends Inner

用这个

class Concrete1 extends super[Trait1].Inner

那应该能得到你想要的东西

(编辑:李大同)

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

    推荐文章
      热点阅读