【发布时间】:2012-09-13 16:22:48
【问题描述】:
我有以下代码:
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 中覆盖变量 next 单元格[Cell.this.NEXT];变量 next 有 不兼容的类型
这里很明显this 的类型VAL <: AnyVal 与NEXT <: AnyVal 相同,但是我仍然得到错误。我如何告诉 Scala next 应该能够返回 Cell[A <: AnyVal] 类型的任何东西,但是这种类型应该 不 必须与类类型参数 [VAL <: AnyVal] 相同?否则我可以只使用[VAL],但它会限制太多,例如对于Cell[Int],它将限制next 方法只返回Cell[Int] 类型的实例。但我希望 next 可以重新分配给任何其他 Cell[*] 类型实例。
【问题讨论】:
-
"var next: Cell[NEXT]" - 我认为是错字,可能是 "var next: CellT[NEXT]"
-
不,这不是一个类型——我的代码就是这样写的。不过你说的是更合适的设计,那我就修一下,谢谢!!!
标签: scala inheritance types