Я новичок в способности отражения Scala. Мне было интересно, можно ли построить фабричный объект, который поставляет экземпляры разных классов в соответствии с параметром типа.Использование API отражения Scala для динамического создания экземпляра фабричного класса
Код ниже не работает, но он описывает в минимальном примере то, чего я пытаюсь достичь. Я оставил код для A1Factory и A2Factory, потому что здесь они не имеют значения.
sealed abstract class A
class A1 extends A
class A2 extends A
object Factory {
def apply[T <: A]() = {
classOf[T] match {
case x: A1 => new A1Factory()
case x: A2 => new A2Factory()
}
}
}
То, что я хочу, чтобы иметь возможность сделать что-то вроде этого:
type currentType = A1
val factory = Factory[currentType]()
И фабрика типа A1Factory.
Можно ли это сделать?
Вы можете рассмотреть вопрос о 'TypeTags', чтобы избежать стирания параметров' Т *. – gzm0