【问题标题】:scala self generic illegal inheritancescala 自泛型非法继承
【发布时间】:2018-08-19 00:33:55
【问题描述】:

基本上这就是我想要做的。 具有成员的特征和继承该成员并对其进行初始化的另一个特征。 然后是一个类,它采用必须从第一个特征继承的泛型类型并访问该成员

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”

我想定义多个继承自父亲特征的特征,然后定义一个类,该类采用父亲的子特征之一并访问其值

【问题讨论】:

  • 在这种情况下,坚持命名约定会很有帮助:a) 类,特征以大写开头。 b) 类型参数:单个大写字母 c) 其他类不是单个字母。

标签: scala oop generics inheritance


【解决方案1】:

我找到了答案,我只需要在创建对象时扩展它,就像这样:

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)
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2013-06-26
    相关资源
    最近更新 更多