Так-с, ну что ж, пора и по онтопику пошутить. Как говорит товарищ Lazytech, "nobody can understand..." и далее по тексту.
java reflection (scala syntax):
def createInstance[DTO <: AnyRef](c: Class[DTO]): DTO = c.newInstance |
scala reflection:
def createInstance[DTO <: AnyRef : TypeTag](c: Class[DTO]): DTO = {
import reflect.runtime.{universe => u}
val m = u.runtimeMirror(getClass.getClassLoader)
val c = u.typeOf[DTO].typeSymbol.asClass
// Находим конструктор без аргументов среди overloaded-альтернатив:
val cc = u.typeOf[DTO].declaration(u.nme.CONSTRUCTOR).asTerm.alternatives.
map(_.asMethod).filter(m => m.paramss.size == 1 && m.paramss.head.isEmpty).head
val cm = m.reflectClass(c)
val ccm = cm.reflectConstructor(cc)
ccm().asInstanceOf[DTO]
} |