【发布时间】:2013-02-08 07:51:05
【问题描述】:
说我有:
trait A
class B extends A
class C extends A
有没有办法配置类型参数:
class Foo[AType <: A with canCreateInstance]
def newAType : AType = new AType
这个想法是 Foo 只能采用实现 A 的类,如 B 或 C,但不能采用 A 本身。
【问题讨论】:
-
恕我直言,实现这一点的最常见方法不是要求可以实例化类型,而是使用工厂。例如,您可以将工厂传递给
Foo的构造函数,该工厂可用于在Foo内构造新的As。这简化了设计,因为您不必关心A是抽象的还是A的某个可实例化子类型,您只需要知道如何构造它。 -
@ultramiraculous -- 不可能完全按照你的要求去做。