我正在使用2.10.4。
我需要反映一个Tuple的类型变量,以便我可以动态创建一个Tuple实例并使用正确类型的参数。到目前为止,我只能设法反映Type变量(T1,T2),如下面的测试用例中所示,因此我无法阻止将不需要的类型值插入到新实例化的元组中。
非常感谢任何帮助
package scala.reflect
import org.scalatest.FunSuite
class ReflectTupleType extends FunSuite {
import scala.reflect.runtime._
import scala.reflect.runtime.universe._
def reflect[T](arg1: Any, arg2: Any)(implicit tag: TypeTag[T]): T = {
val ru = scala.reflect.runtime.universe
val ctxcl = Thread.currentThread().getContextClassLoader()
val mirr = runtimeMirror(ctxcl)
val classSym = typeOf[T].typeSymbol.asClass
val classMirr = mirr.reflectClass(classSym)
val ctorMethodSym = typeOf[T].declaration(nme.CONSTRUCTOR).asMethod
val paramTypeList = ctorMethodSym.paramss.head map (_.typeSignature)
println("paramTypeList " + paramTypeList) //Type variables not Type
val ctorm = classMirr.reflectConstructor(ctorMethodSym)
val tuple2 = ctorm(arg1, arg2)
tuple2.asInstanceOf[T]
}
test("tuple") {
val validTup2 = reflect[(String, Int)]("Test", 1) //This is valid
println("Should be valid " + validTup2)
val invalidTup2 = reflect[(String, Int)]("Test", "a") //This is not valid - wrong type
println("Should be invalid " +invalidTup2)
}
}