scala - 用抽象类型交换类型参数

标签 scala

为了避免在对参数化类进行子类化时重复类型参数信息,我试图重写一些代码以使用抽象类型。

我想表达的类似于:

class Group[A]

abstract class Thing[A, G <: Group[A]] {
  val group: G
}

class SomeGroup[A] extends Group[A] { g =>    
  object SomeThing extends Thing[A, SomeGroup[A]] {
    val group = g
  }
}

使用抽象类型,到目前为止我最好的尝试是:
class Group {
  type A
}

abstract class Thing { t =>
  type A
  type G <: Group { type A = t.A }
  val group: G
}

class SomeGroup extends Group { g =>
  object SomeThing extends Thing {
    type A = g.A
    type G = SomeGroup { type A = g.A }
    val group = g
  }
}

但是,我在最后一行收到编译器错误,提示“值组具有不兼容的类型”。

如何使用抽象类型编写第一个示例?

最佳答案

你需要给类型检查器/推断器一些帮助:

val group : G = g

让它通过。

关于scala - 用抽象类型交换类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8619465/

相关文章:

java.lang.NoClassDefFoundError : Could not initialize class 错误

scala - 动态构建 Spark SQL 查询

scala - 在 Scala 中,如何重新分配元组值?

scala - 在 Scala 中运行处理 PApplet

scala - 在Scala中,如何在不知道长度的情况下获取从第n个元素到列表末尾的列表切片?

用于管理对象池的 Scala 方式

java - 调用以 double[] 作为参数的 java 函数

mysql - HSQL 中的大写

scala - 执行 play Future 查询时,scala 变量的值不会改变。为什么?

java - 同时具有java和scala的maven项目