清单与ClassManifest.这个Scala错误是什么意思?

Łuk*_*Lew 3 scala manifest scala-2.8

这个错误是什么意思?

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 })
                                    ^
Run Code Online (Sandbox Code Playgroud)

我没有线索......

Dan*_*ral 5

好吧,让我们考虑一些事情.第一:

type T = { def x: Int }
Run Code Online (Sandbox Code Playgroud)

这种类型称为结构类型.它不是定义一个类,而是一组共享具有特定类型签名的方法的对象.在运行时,它被删除Object,并且任何调用x都是通过反射完成的,因为Java没有任何等价物.

下一个:

val a = Array[{ def x: Int }](new { def x = 3 }) 
Run Code Online (Sandbox Code Playgroud)

请注意,您没有使用new Array,但是Array.这是apply对Scala Array对象方法的调用.此方法需要一个ClassManifest隐式参数,该参数将告诉Scala如何创建数组.这是必要的,因为数组不会在Java中被删除,因此Scala必须为Java提供精确的类型.

这就是问题所在:Java中没有这种类型.

我想知道Scala是否可以Object在这里使用.票可能是有序的,但不要指望它是可能的.