2013-06-26 68 views
2

我會如何使用變量作爲類型?例如: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 = [email protected] 

scala> convert[B, A](b) 
res18: A = [email protected] 

這工作正常。但我有興趣做:

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?),但我無法找到在這裏使用正確的東西。

謝謝!

回答

5

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) 
+0

爲什麼我繼續沒有看到這些...非常感謝! – Emre