似乎TypeTags
只适用于被调用方法的参数中使用的类型参数,而不是返回类型:
scala> :paste
// Entering paste mode (ctrl-D to finish)
import scala.reflect.runtime.universe._
object Test {
def withParam[T: TypeTag](v: T): T = {
println(typeOf[T])
0.asInstanceOf[T]
}
def justReturn[T: TypeTag](): T = {
println(typeOf[T])
0.asInstanceOf[T]
}
}
// Exiting paste mode, now interpreting.
import scala.reflect.runtime.universe._
defined module Test
scala> val i: Int = Test.withParam(17)
Int
i: Int = 0
scala> val j: Int = Test.justReturn()
Nothing
j: Int = 0
这和2.9中Manifest的行为是一致的,但是有什么理由做不到,有没有其他方法可以达到这个效果呢?