2013-06-26 3 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