下面的代码不会(在斯卡拉2.11)编译:我怎样才能别名协泛型类型参数
case class CovariantClass[+R](value: R) {
type T = R
def get: R = value
}
object Main {
def main(args: Array[String]): Unit ={
println(CovariantClass[String]("hello").get)
}
}
的错误信息是:
Error:(4, 8) covariant type R occurs in invariant position in type R of type T
type T = R
^
为什么我不能别名协变类型参数?如果我删除行type T = R
,代码编译并打印hello
,所以别名似乎是问题。不幸的是,这意味着我不能为更复杂的类型创建别名,例如type T = List[R]
也不能编译,尽管List
是协变的。
谢谢你的答案和引用scala规范。我同意重命名'R'而不是别名,但我喜欢为''[ReturnValueInCaseOfFailure,R]''做一个别名。不幸的是,你提出的解决方法使'T'参数化,但它可能是我能达到我想要的最接近的。 – 2014-10-18 11:18:20