Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package database
- import scala.reflect.ClassTag
- trait Mapper[T] {
- def map(row: List[Any]): T
- }
- class TestUnappMacro {
- import TestUnappMacro._
- def callByName(f: => Unit) = f
- def callAnon(f: () => Any) = f
- callAnon(() => {
- case class Something(id: Int, name: String)
- getMapper[Something](this).map(List(10, "jack"))
- }) // так работает
- callByName { // так нет
- case class Something(id: Int, name: String)
- getMapper[Something](this).map(List(10, "jack"))
- }
- }
- object TestUnappMacro {
- def getMapper[T: ClassTag](out: Any) = {
- val tt = implicitly[ClassTag[T]]
- val rclass = tt.runtimeClass
- val ctor = rclass.getConstructors()(0)
- val ctypes = ctor.getParameterTypes
- ctypes.foreach((t) => println(t))
- val cl = getClass
- new Mapper[T] {
- def map(row: List[Any]): T = {
- ctor.newInstance(out.asInstanceOf[Object]::row.map(_.asInstanceOf[Object]):_*).asInstanceOf[T]
- }
- }
- }
- }
- object Run extends App {
- new TestUnappMacro
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement