我有以下定义:
trait Xode[+R] {
type S = Option[R]
}
case class AXode(a: Int) extends Xode[Int]
case class BXode(b: String) extends Xode[String]
object xtore {
private var m: Map[Xode[_], Xode[_]#S] = Map()
def put[A <: Xode[_]](k: A)(v: A#S) {
m += k -> v
}
}
在执行以下措施时,没有发现任何错误,尽管我预期安东和安特区是备选办法。
xtore.put(AXode(5))(Some("apples")) // <-- no error
可能发生的情况是<代码>。 缩略语 Xode[_], 然后Xode[_]#S
。 备选案文[_]。 我能否用类型参数表达我的意向?
如果R是抽象的一类成员,而不是一个类型参数,则按预期操作。 或依附方法类型和打字:k.S 是否有任何其他建筑?