这个错误是什么意思?
scala> val a = Array[{ def x: Int }](new { def x = 3 })
<console>:5: error: type mismatch;
found : scala.reflect.Manifest[java.lang.Object]
required: scala.reflect.ClassManifest[AnyRef{def x: Int}]
val a = Array[{ def x: Int }](new { def x = 3 })
^
我不知道...
好吧,让我们考虑几件事。第一的:
type T = { def x: Int }
这种类型被称为结构类型。它定义的不是一个类,而是一组共享具有特定类型签名的方法的对象。在运行时,它被擦除Object
,以及任何对x
是通过反射完成的,因为 Java 没有任何与它等效的东西。
Next:
val a = Array[{ def x: Int }](new { def x = 3 })
请注意,您没有使用new Array
, but Array
。这是对apply
Scala 的方法Array
目的。该方法需要一个ClassManifest
隐式参数将告诉 Scala 如何创建数组。这是必要的,因为数组没有被删除在Java中,所以Scala必须向Java提供精确的类型。
问题是:Java 中没有这样的类型。
我确实想知道 Scala 是否无法使用Object
这里。票可能是有序的,但不要指望它是可能的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)