5

私は次のように一般的なファクトリを作成して遊んでいました:

trait Factory[T] { def createInstance():T = new T() }
val dateFactory = new Factory[Date](){}
val myDate = dateFactory.createInstance()

T は実行時まで定義されていないため、「new T()」はコンパイルされません。クラスのインスタンスを何らかのメソッドに渡すことで機能させることができることを知っています(つまり、 createInstance(classOf[Date]) )

超単純なファクトリを作成できるように、「new T()」を置き換えることができるイントロスペクション マジックがあるかどうかを尋ねています。

4

1 に答える 1

10

これはうまくいきます:

class Factory[T : ClassManifest] {
  def
  createInstance(): T =
    (implicitly[ClassManifest[T]]).erasure.newInstance.asInstanceOf[T]
}

インスタンス化されるクラスにデフォルト (ゼロ引数) コンストラクターがある場合

于 2010-08-20T20:16:31.133 に答える