2013-05-23 20 views
5

स्कैला 2.10 का उपयोग करके, मैं एक स्ट्रिंग से कक्षा को तुरंत चालू करने की कोशिश कर रहा हूं और मैं इसका टाइपसेट प्राप्त करना चाहता हूं।क्या रनटाइम इंस्टेंस के टाइपटाग को प्राप्त करना संभव है?

उदाहरण के लिए

:

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] 

वहाँ एक रास्ता स्केला साथ रनटाइम पर जावा विलोपन काबू पाने के लिए है?

उत्तर

10

मेरा मानना ​​है कि आप 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

संबंधित मुद्दे

 संबंधित मुद्दे