【发布时间】:2019-06-27 19:27:08
【问题描述】:
我想要做的是使用 TypeTag 在 Scala 函数中返回泛型类型。这是示例代码。
trait Parent[T]
object IntChild extends Parent[Int]
object StringChild extends Parent[String]
object SomeClass {
def of[A: TypeTag]: Parent[T] = {
getElementType[A] match {
case Int => IntChild
case String => StringChild
}
}
}
SomeClass.of[Array[Int]]
但它会引发编译错误。因为of方法的返回类型在编译类型中是不固定的。有没有办法从 TypeTag 中获取类型信息并将类型嵌入到返回的类型中?
我期待的是什么
// T is inferred from TypeTag A.
def of[A: TypeTag, T]: Parent[T] = {
//...
}
我发现这段代码也没有通过编译。所以我们需要修复从 A 的 TypeTag 推断出的类型信息。
def of[A: TypeTag]: Parent[_] = {
//...
}
这是错误。
type mismatch;
[error] found : Array[Int]
[error] required: Array[_$1]
如何提前获取元素类型?
【问题讨论】:
标签: scala types compiler-errors type-systems