为什么我不能创建泛型类型的数组?

时间:2011-05-21 23:31:04

标签: arrays scala

这不起作用:

def giveArray[T](elem:T):Array[T] = {
    new Array[T](1)
  }

但这样做:

  def giveList[T](elem:T):List[T] = {
    List.empty[T]
  }

我确信这是一个非常基本的东西,我知道Arrays在Scala中表现得有点不寻常。

有人可以向我解释如何创建这样一个数组,以及为什么它首先不起作用?

1 个答案:

答案 0 :(得分:18)

这是由于JVM类型擦除。引入Manifest来处理这个问题,它们会将类型信息附加到类型T上。这将编译:

def giveArray[T: Manifest](elem:T):Array[T] = {
  new Array[T](1)
}

这方面几乎有重复的问题。让我看看我是否可以挖掘。 有关详细信息,请参阅http://www.scala-lang.org/docu/files/collections-api/collections_38.html。我引用(在你的情况下用elem替换evenElems)

  

这里需要的是通过提供一些运行时提示来帮助编译器,提示evenElems的实际类型参数是什么

特别是您也可以使用ClassManifest

def giveArray[T: ClassManifest](elem:T):Array[T] = {
  new Array[T](1)
}

类似的问题: