首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scala -相同但不同的类型

Scala -相同但不同的类型
EN

Stack Overflow用户
提问于 2012-09-13 16:22:48
回答 3查看 124关注 0票数 0

我有以下代码:

代码语言:javascript
运行
复制
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具有不兼容的类型

显然,thisVAL <: AnyVal类型与NEXT <: AnyVal类型相同,但是,我仍然会得到错误。我如何告诉Scala next应该能够返回任何类型的Cell[A <: AnyVal],但是这种类型不应该与类类型参数[VAL <: AnyVal]相同?否则,我可以只使用[VAL],但它将限制太大,例如,对于Cell[Int],它将限制next方法只返回Cell[Int]类型实例。但是我希望next可以重新分配到任何其他Cell[*]类型的实例中。

EN

Stack Overflow用户

发布于 2012-09-13 17:39:42

这里很明显,它的类型为VAL <:AnyVal,与NEXT <:AnyVal相同

不,他们不是一样的,他们只是有着同样的约束。NEXT尚未指定。假设您随后像下面这样的子类Cell:

代码语言:javascript
运行
复制
class StringNextCell extends Cell {
    type NEXT = String
}

现在,StringNextCell.next应该是Cell[String]类型的,但是您从单元格中的声明将它声明为Cell[Int]

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12410669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档