2013-05-23 11 views
5

, bir dizeden bir sınıf örneğini oluşturmak için çalışıyorum ve onun typetag almak istiyorum. örneğinbir çalışma zamanı örneğinin typeTag almak mümkün mü? scala 2.10 Kullanılması

:

scala> printClassName(new String()) 
String 

Ama bu değildir:

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

bu çalışmaktadır scala ile zamanında java silinmesini aşmak için bir yol

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

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

var mı?

cevap

10

Sana Type (değil TypeTag) almak için Scala Yansıma API kullanmak inanıyoruz. İstediğin bu ama typeTag[Y].tpe basılmış olan aynı şey budur emin değilim.

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

Tam olarak aradığım şey budur. Çok teşekkür ederim! – itsu

İlgili konular