2014-09-26 34 views
0

找到了obtain typeTag for least common supertype。但如何将类型标签的泛型捕获到类型别名中来操作类型本身?如何从TypeTag [T]或Scala中的其他任何通用捕获T?

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

type T = ??? // should be SomeType 

我需要它自动获取公用超类型即使我的类层次结构将在重构期间被改变。

回答

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] 

,但你可以” t用类型变量做它,因为它将被“擦除”到任何

相关问题