1

明らかにコンストラクターにパラメーターを持たない型パラメーターを受け取り、そのコンストラクターで構築されたダミー オブジェクトを返すメソッドを作成したいと考えています。基本的にある種の工場パターン。

  • それはScalaでも可能ですか?
  • それは良い考えですか?そうでない場合、より良いパターンはありますか?
  • コンパイル時のみ (つまり、リフレクションなし) にこれを達成する方法はありますか?

コード例:

trait Model
class A extends Model
class B extends Model

def dummy[T <: Model] = new T   // Fails compilation with "class type required but T found"

dummy[A]  // Returns an instance of A
dummy[B]  // Returns an instance of B
4

1 に答える 1

4

ClassManifestこれは、消去を克服するように設計された sを使用して実行できます。

def dummy[T <: Model : ClassManifest] = classManifest[T].erasure.newInstance

リフレクションなしでコンパイル時に行うことに関しては、scala 2.10 マクロを使用して行うことができると思います。

于 2013-04-07T10:55:45.740 に答える