2012-01-13 107 views
4

我想定义一个泛型类,它需要一个参数化类型T,然后在类的数组定义中使用该类型。我写的,我觉得好像它应该工作Scala数组和参数化类型

class MyClass[T] { 

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

} 

但是,编译器有以下

  • 找不到类清单的元素类型T
  • 值newArray不是抱怨以下Null的成员

任何人都知道这里发生了什么以及它不开心吗?

回答

9

编译器需要知道如何实例化T类型的东西。在通过类型擦除来处理泛型的传统Java方式中,这是无法合理完成的;编译器只是说,“嘿,我不知道T是什么,所以我不觉得你允许你像这样实例化一个T。”然而,在斯卡拉,这里有一个词语:体现。为了包含T的清单,只需将该代码的第一行更改为

class MyClass[T : Manifest] { 

就是这样。