这不起作用:
def giveArray[T](elem:T):Array[T] = {
new Array[T](1)
}
但这样做:
def giveList[T](elem:T):List[T] = {
List.empty[T]
}
我确信这是一个非常基本的东西,我知道Arrays在Scala中表现得有点不寻常。
有人可以向我解释如何创建这样一个数组,以及为什么它首先不起作用?
答案 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)
}
类似的问题: