5


0

サンプルインスタンスなしで汎用インスタンスを生成する方法はscalaにありますか?

次のように汎用ファクトリーを作成して遊んでいた:

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

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

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

1 Answer


10


これは動作します:

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

_if_インスタンス化されるクラスには、デフォルト(引数ゼロ)コンストラクターがあります。