-
Notifications
You must be signed in to change notification settings - Fork 16
Open
Description
switch to scala reflection, which will allow sumac to support types like List[Int]. Finally found the key thing required for this:
import scala.reflect.runtime.{universe => ru}
def getType[T: ru.TypeTag](obj: T) = ru.typeTag[T].tpe
class Foo
class Bar extends Foo
val b: Foo = new Bar
scala> getType(b)
res0: reflect.runtime.universe.Type = Foo
scala> b.getClass()
res1: Class[_ <: Foo] = class Bar
class Foo {
def doStuff() = {
this.getClass().getDeclaredField("y")
}
}
class Bar extends Foo {
val x: Int = 17
val y: List[Int] = List(1,2,3)
}
def getRuntimeType[A](item: A) = {
val mirror = ru.runtimeMirror(this.getClass.getClassLoader)
mirror.classSymbol(item.getClass).toType
}
val b : Foo = new Bar
scala> getRuntimeType(b).members.collect{case x if x.isTerm => x.asTerm}.filter{_.isGetter}.map{x => x -> x.typeSignature}.toMap
Map(value y -> => scala.List[scala.Int], value x -> => scala.Int)
http://stackoverflow.com/questions/17010237/using-scala-reflection-to-find-most-derived-runtime-type
Metadata
Metadata
Assignees
Labels
No labels