【发布时间】:2013-06-11 22:20:26
【问题描述】:
我目前无法完全理解 Scala 的 TypeTag 反射 API。在网络上可以找到的信息非常少,所有的尝试和错误尝试都无济于事。
def doStuff[T: TypeTag]( param: String ): SomeStuff[E] =
{
val t = typeOf[T]
if( <t extends one specific Trait from my application and is an object> )
{
<retrieve that companion object and return one of its values>
}
else
{
t match
{
case x if x =:= typeOf[String] => doOtherStuff[String]( param )
case x if x =:= typeOf[Int] => doOtherStuff[Int]( param )
...
}
}
}
与 Scala 的预定义类型匹配的模式正在工作。但是,我没有设法检查提供的泛型参数是否继承了我的特定特征,然后在T 后面检索实际类的伴随对象。编译器拒绝直接尝试typeOf[MyTrait[_, T]],告诉我没有可用于 MyTag 的 TypeTag。如何创建它?
此外,Trait 令人讨厌的通用签名 MyTrait[M <: MyTrait[M, E], E <: Entity[M, E]] 正在加剧整个事情。
除了一些有用的想法来解决这个问题,我非常感谢任何进一步的阅读链接(尽管我已经阅读了所有关于 SO 的内容)。
【问题讨论】:
标签: scala generics reflection runtime