2012-01-13 11 views
4

パラメータ化された型Tをとり、その型をクラスの配列定義に使用する汎用クラスを定義しようとしています。私はそれがスカラ配列とパラメータ化された型

class MyClass[T] { 

    val myarr:Array[T] = new Array[T](10) 

} 

を動作するはずのように私は見えたと思った次のことを書きました。しかし、次の

  • がNEWARRAYではない要素型Tのマニフェストクラスは
  • 値を見つけることができないとコンパイラが文句を言いヌルのメンバー

誰もがここで何が起こっているのか分かりません。

答えて

9

コンパイラはタイプTのものをインスタンス化する方法を知る必要があります。タイプ消去によってジェネリックを処理する従来のJavaの方法では、これは合理的に実行できません。コンパイラはちょうど "ちょっと、私はTが何であるか分からないので、あなたがTのようなインスタンスを作ることを許すことについてとても気に入らない"と言う。しかし、Scalaでは、これには言葉があります:マニフェスト。 Tのマニフェストを含めるには、そのコードの最初の行を

class MyClass[T : Manifest] { 

に変更してください。

関連する問題