为什么我不能创建泛型类型的数组?
这行不通:
def giveArray[T](elem:T):Array[T] = {
new Array[T](1)
}
但是这行得通:
def giveList[T](elem:T):List[T] = {
List.empty[T]
}
我确信这是一个非常基本的事情,而且我知道数组在 Scala 中的行为可能有点不寻常。
有人可以向我解释如何创建这样的数组以及为什么它首先不起作用吗?
This does not work:
def giveArray[T](elem:T):Array[T] = {
new Array[T](1)
}
But this does:
def giveList[T](elem:T):List[T] = {
List.empty[T]
}
I am sure this is a pretty basic thing and I know that Arrays can behave a bit unusual in Scala.
Could someone explain to me how to create such an Array and also why it doesn't work in the first place?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是由于 JVM 类型擦除造成的。引入清单来处理这个问题,它们会导致类型信息附加到类型 T 上。这将编译:
关于此问题几乎有重复的问题。让我看看能不能挖出来。
请参阅 http://www.scala-lang.org/docu /files/collections-api/collections_38.html 了解更多详细信息。我引用(在您的情况下将 EvenElems 替换为 elem)
特别是,您还可以使用
ClassManifest
。类似问题:
This is due to JVM type erasure. Manifest were introduce to handle this, they cause type information to be attached to the type T. This will compile:
There are nearly duplicated questions on this. Let me see if I can dig up.
See http://www.scala-lang.org/docu/files/collections-api/collections_38.html for more details. I quote (replace evenElems with elem in your case)
In particular you can also use
ClassManifest
.Similar questions: