2014-09-26 44 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用類型變量做它,因爲它將被「擦除」到任何

相關問題