【发布时间】:2014-08-10 05:09:24
【问题描述】:
如果我有一个 C 类定义为
class C[A]
有没有办法在 C 中创建 A 的新实例?类似的东西
class C[A] {
def f(): A = new A()
}
我知道,如果可能的话,您可能必须在某处指定构造函数参数,这很好。
如果不可能,是否有任何设计模式可以处理您希望创建类型的新实例的情况?
【问题讨论】:
-
如果具体类型没有(无参数)构造函数,你建议会发生什么?
-
理想情况下,您可以在 type 参数中指定它。所以我可以将 C 定义为
class C[A(String, String)]或其他东西。然后我必须用两个字符串参数调用 A。 -
@Raphael 不会,但
class C[(String, String), A]会。通过使用第二个类型参数,扩展下面的方法以将部分(或全部)构造函数参数传递给make方法非常简单。 -
但是,C 的一种定义仅适用于一种特定的构造函数签名。这就是我的观点。
-
@Raphael 不是这样。
class C[Args, T](implicit e: Makeable[Args, T]) { ... }。每个 Makeable 实例只会根据需要解构 Args 类型以调用正确的构造函数。