Scala:包含类型的变量

Emr*_*mre 2 reflection scala

我如何编写使用变量作为类型?例如:

scala> class A
defined class A

scala> class B extends A
defined class B

scala> def convert[F, T](from: F): T = from.asInstanceOf[T]
convert: [F, T](from: F)T

scala> val b = new B
b: B = B@54038f36

scala> convert[B, A](b)
res18: A = B@54038f36
Run Code Online (Sandbox Code Playgroud)

这很好用.但我有兴趣做:

scala> val aType = classOf[A]
aType: Class[A] = class A

scala> convert[B, aType](b)
<console>:12: error: not found: type aType
              convert[B, aType](b)
Run Code Online (Sandbox Code Playgroud)

如果没有初始化对象并obj.type在那里使用,我该怎么做?我怀疑我需要使用一些反射功能(可能TypeTag?),但我无法找到在这里使用的正确的东西.

谢谢!

gzm*_*zm0 5

Java Class有一个方法cast可以完全满足您的需求:

val aType = classOf[A]
aType.cast(b)
Run Code Online (Sandbox Code Playgroud)

现在作为一种方法:

def convert[F,T](from: F, clazz: Class[T]) = clazz.cast(from)
Run Code Online (Sandbox Code Playgroud)

并致电:

convert(b, aType)
Run Code Online (Sandbox Code Playgroud)