Skip to content

Instantly share code, notes, and snippets.

@debasishg
Forked from xeno-by/gist:4714454
Created February 6, 2013 07:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save debasishg/4720884 to your computer and use it in GitHub Desktop.
Save debasishg/4720884 to your computer and use it in GitHub Desktop.
14:26 ~/Projects/210x (2.10.x)$ scala
Welcome to Scala version 2.10.1-20130204-105326-3d318be51f (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_37).
Type in expressions to have them evaluated.
Type :help for more information.
scala> case class Shop(store: String, item: String, cost: Int) { def this() = this(null, null, 0) }
defined class Shop
scala> val t = typeOf[Shop]
t: reflect.runtime.universe.Type = Shop
scala> val m = runtimeMirror(getClass.getClassLoader)
m: reflect.runtime.universe.Mirror = JavaMirror with scala.tools.nsc.interpreter.IMain$TranslatingClassLoader@1d87b360 of type class scala.tools.nsc.interpreter.IMain$TranslatingClassLoader with classpath [(memory)] and parent being scala.tools.nsc.util.ScalaClassLoader$URLClassLoader@381172c5 of type class scala.tools.nsc.util.ScalaClassLoader$URLClassLoader with classpath [file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar,file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/ui.jar,file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsse.jar,file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jce.jar,file:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/charsets.jar,file:...
scala> val cls = t.typeSymbol.asClass
cls: reflect.runtime.universe.ClassSymbol = class Shop
scala> val cm = m.reflectClass(cls)
cm: reflect.runtime.universe.ClassMirror = class mirror for Shop (bound to null)
scala> val alts = t.declaration(nme.CONSTRUCTOR).asTerm.alternatives
alts: List[reflect.runtime.universe.Symbol] = List(constructor Shop, constructor Shop)
scala> val noargCtor = alts.collect{ case ms: MethodSymbol if ms.paramss == List(List()) => ms }.head
noargCtor: reflect.runtime.universe.MethodSymbol = constructor Shop
scala> cm.reflectConstructor(noargCtor)()
res0: Any = Shop(null,null,0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment