如何使用变量作为类型进行编写?例如:
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
这很好用。但我有兴趣做:
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)
如果不初始化对象并在其中使用obj.type
,我该如何做到这一点?我怀疑我需要使用一些反射功能(也许是TypeTag
?),但我找不到在这里使用什么是正确的。
谢谢!
Java的Class
有一个方法cast
,它可以满足您的需要:
val aType = classOf[A]
aType.cast(b)
现在作为一种方法:
def convert[F,T](from: F, clazz: Class[T]) = clazz.cast(from)
然后呼叫:
convert(b, aType)