假设我有一个像这样的代码:
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)