斯卡拉自我通用的非法继承

基本这是我正在尝试做的。 具有成员和另一个继承该成员并初始化该成员的特征的特征。 然后是一个类,该类需要一个必须从第一个特征继承并访问该成员的泛型类型

object main extends App{
val z =  new c[b]()
  z.p()
}

trait a{
  val x : String
}

trait b extends a {
  val x = 1
}

class c [A <: a]  {
  self: A =>
  def p(): Unit ={
    print(x)
  }
}

但在线

val z =  new c[b]()

c [b]加下划线,编译器抱怨

“非法继承,自我类型c [b]不符合A”

我想定义从父特征继承的多个特征,然后定义一个接受父特征之一并访问其值的类


我找到了答案,我只需在创建对象时扩展对象,如下所示:

object main extends App{
val z =  new c[b] with b
  z.p()
}

trait a{
  val x : String
}

trait b extends a {
  val x = "1"
}

class c[A <: a]{
  this: A =>
  def p(): Unit ={
    print(x)
  }
}
链接地址: http://www.djcxy.com/p/51031.html

上一篇: scala self generic illegal inheritance

下一篇: Extend trait with private constructor parameter