我尝试根据从反射api中获取的泛型类型来解析类的完整路径。 对于List [Int]的实例,我只有" Int"串。这是工作示例
val toolBox=universe.runtimeMirror(getClass.getClassLoader).mkToolBox()
toolBox.typecheck(q"??? : Int").tpe.typeSymbol.fullName
全名是假设的java.lang.Int。
但是传递后的变量形式为quasiQuote 全名总是java.langString,无论t变量下是什么。 我想$ {t}被解析为String类型的表达式。
val t = "Int"
toolBox.typecheck(q"??? : ${t}").tpe.typeSymbol.fullName
感谢您的帮助, 克里斯
答案 0 :(得分:0)
如果要将类型名称拼接为quasiquote,那应该是TypeName
,而不是String
。
scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._
scala> import scala.tools.reflect.ToolBox
import scala.tools.reflect.ToolBox
scala> val toolBox = runtimeMirror(getClass.getClassLoader).mkToolBox()
toolBox: scala.tools.reflect.ToolBox[reflect.runtime.universe.type] = scala.tools.reflect.ToolBoxFactory$ToolBoxImpl@42c2120c
scala> val t = "Int"
t: String = Int
scala> toolBox.typecheck(q"??? : ${TypeName(t)}").tpe.typeSymbol.fullName
res0: String = scala.Int