我有以下代码:
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类型的CellCell.this.NEXT中重写变量next;变量next具有不兼容的类型
显然,this的VAL <: AnyVal类型与NEXT <: AnyVal类型相同,但是,我仍然会得到错误。我如何告诉Scala next应该能够返回任何类型的Cell[A <: AnyVal],但是这种类型不应该与类类型参数[VAL <: AnyVal]相同?否则,我可以只使用[VAL],但它将限制太大,例如,对于Cell[Int],它将限制next方法只返回Cell[Int]类型实例。但是我希望next可以重新分配到任何其他Cell[*]类型的实例中。
发布于 2012-09-13 17:39:42
这里很明显,它的类型为VAL <:AnyVal,与NEXT <:AnyVal相同
不,他们不是一样的,他们只是有着同样的约束。NEXT尚未指定。假设您随后像下面这样的子类Cell:
class StringNextCell extends Cell {
type NEXT = String
}现在,StringNextCell.next应该是Cell[String]类型的,但是您从单元格中的声明将它声明为Cell[Int]
https://stackoverflow.com/questions/12410669
复制相似问题