找到obtain typeTag for least common supertype的方法。但是如何将typetag的泛型捕获到类型别名中以操作类型本身?
假设TypeTag[SomeType]
,其中SomeType
是编译时已知的类型推断的结果(例如来自linked answer的t[MyClass1, MyClass2].common
的结果)
type T = ??? // should be SomeType
我需要它来自动获取常见的超类型,即使我的类层次结构在重构期间会被更改。
答案 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]
但你不能用类型变量来做,因为它会被“删除”到任何