我有以下代码:斯卡拉 - 相同,但不同类型
trait CellT[VAL <: AnyVal] {
var value: VAL
type NEXT <: AnyVal
var next: CellT[NEXT]
}
abstract class Cell[VAL <: AnyVal] extends CellT[VAL] {
var next = this // defaults to `this`. ERROR
}
// impl example:
class CellInt extends Cell[Int] {
var value: Int = 0
}
错误说
在型性状CellT覆盖下一个变量 细胞[Cell.this.NEXT];可变未来有 不兼容的类型
这显然this
将有类型VAL <: AnyVal
这是一样的NEXT <: AnyVal
,但是,我仍然得到错误。我怎么能告诉斯卡拉说next
应该能够返回Cell[A <: AnyVal]
类型的东西,但这种类型应该不需要一样的类类型参数[VAL <: AnyVal]
???否则,我可以只使用[VAL]
但它会过于严格,例如用于Cell[Int]
这将限制next
方法只返回Cell[Int]
类型实例。但我想next
要重新分配到其他任何Cell[*]
类型的实例。
“var next:Cell [NEXT]” - 我认为是错字,可能是“var next:CellT [NEXT]” –
不,这不是一种类型 - 这就是我写代码的方式。但是你所说的是一个更合适的设计,所以我会解决它,谢谢! – noncom