Scala создает экземпляры объектов из имени класса String

У меня есть черта Action, которую расширяют многие разные классы ${любое}Action. Я хотел бы сделать класс, отвечающий за создание экземпляров этих объектов Action, динамическим в том смысле, что он не будет знать, какой из расширяющих объектов он будет создавать, пока ему не будет передана строка с именем. Я хочу, чтобы он взял имя класса, а затем построил объект на основе этой строки.

У меня возникли проблемы с поиском краткого/недавнего ответа относительно этого простого размышления. Я надеялся получить некоторые предложения относительно места для поиска или изящного способа сделать это.


person turbo_laser    schedule 03.09.2015    source источник
comment
Почему вы хотите сделать это с помощью отражения, а не match (или аналогичного)?   -  person Ryan    schedule 04.09.2015
comment
Мне нужно, чтобы он был очень расширяемым. Таких действий могут быть сотни, и это заявление о прецеденте быстро станет огромным.   -  person turbo_laser    schedule 04.09.2015


Ответы (1)


Вы можете использовать отражения следующим образом:

def actionBuilder(name: String): Action = {
  val action = Class.forName("package." + name + "Action").newInstance()
  action.asInstanceOf[Action]
}
person Philosophus42    schedule 04.09.2015