相关疑难解决方法(0)

使用'type'关键字和路径相关类型覆盖类型

假设我有一个像这样的代码:

trait  Holder  {
  type Value
  def put(v:Value)
}

class JsonHolder extends Holder {
  override type Value = String
  def put(v: JsonHolder.this.Value): Unit = {}
}

class XmlHolder extends Holder {
  override type Value = String
  def put(v: XmlHolder.this.Value): Unit = {}
}

object Foo {
  def main(args: Array[String]) {
    val jsonHolder = new JsonHolder
    val xmlHodler = new XmlHolder
    val valueOfJson = new jsonHolder.Value("AAA")
    val valueOfXml = new xmlHodler.Value("AAA")
    jsonHolder.put(valueOfXml)
  }
}
Run Code Online (Sandbox Code Playgroud)

我不明白这为什么编译.jsonHolder.put(valueOfXml)不应该出现类型错误吗?

如果我改变

type Value
Run Code Online (Sandbox Code Playgroud)

这样的事情:

case class …
Run Code Online (Sandbox Code Playgroud)

types scala

2
推荐指数
1
解决办法
164
查看次数

标签 统计

scala ×1

types ×1