2013-05-23 1 views
5

Использование scala 2.10, я пытаюсь создать экземпляр класса из строки, и я хотел бы получить его typetag.Возможно ли получить типTag экземпляра времени выполнения?

, например:

scala> def printClassName[Y: TypeTag](x: Y) = { println(typeTag[Y].tpe) } 
printClassName: [Y](x: Y)(implicit evidence$1: reflect.runtime.universe.TypeTag[Y])Unit 

это работает:

scala> printClassName(new String()) 
String 

Но это не так:

scala> var foo = Class.forName("java.lang.String") 
myInstance: Class[_] = class java.lang.String 

scala> printClassName(foo) 
java.lang.Class[?0] 

Есть ли способ преодолеть Java стиранию во время выполнения с Скале?

ответ

10

Я считаю, вы можете использовать Scala Reflection api, чтобы получить Type (не TypeTag). Не уверен, что это то, что вы хотели, но это то же самое, что напечатано в typeTag[Y].tpe.

import scala.reflect.runtime.universe._ 
val m = runtimeMirror(getClass.getClassLoader) 
val classSymbol = m.staticClass("java.lang.String") 
val tpe = classSymbol.selfType 
+0

Это именно то, что я искал. Большое спасибо! – itsu

 Смежные вопросы

  • Нет связанных вопросов^_^