我是 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类型。
这可以做到吗?