После некоторых махинаций с Скале я пришел к этому решению для создания новых объектов из данного типаполучения типа от имени типа в Скале
object Entity {
def get[T <: Entity: ClassManifest]: T = {
val entity = implicitly[ClassManifest[T]].erasure.getConstructors()(0).newInstance().asInstanceOf[T]
/** some stuff **/
entity
}
}
abstract class Entity {
}
class Implementation extends Entity {
}
, а затем Usage:
var e = Entity.get[Implementation]
Мои вопросы
это нормально или есть какой-то другой способ сделать это (я использую scala 2.9.2 сейчас)?
Есть ли что-то вроде Class.forName, которое позволяет получить тип от его имени? (Или в более общем случае, можно использовать тип в качестве переменной?)
'Class.forName' вернет' Class', никогда не экземпляр 'Entity', поэтому это всегда будет терпеть неудачу. –