如何从TypeTag [T]或scala中的任何其他泛型中捕获T?

时间:2014-09-26 06:26:42

标签: scala generics types

找到obtain typeTag for least common supertype的方法。但是如何将typetag的泛型捕获到类型别名中以操作类型本身?

假设TypeTag[SomeType],其中SomeType是编译时已知的类型推断的结果(例如来自linked answert[MyClass1, MyClass2].common的结果)

type T = ??? // should be SomeType 

我需要它来自动获取常见的超类型,即使我的类层次结构在重构期间会被更改。

1 个答案:

答案 0 :(得分:2)

如果未删除typeTag的泛型(足以提取在编译时已知的类型的常见超类型),这将起作用:

class TypeHolder { type T }
object TypeHolder {
  def apply[U](a: TypeTag[U]) = new TypeHolder{type T = U} 
}

用法:

val typ = TypeHolder(typeTag[Int])
val k: typ.T = 5
val list = List[typ.T]()
trait A { def aaaa: typ.T } 
someObject.isInstanceOf[typ.T]

但你不能用类型变量来做,因为它会被“删除”到任何