清单与类清单。这个 Scala 错误是什么意思?

2023-12-24

这个错误是什么意思?

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。这是对applyScala 的方法Array目的。该方法需要一个ClassManifest隐式参数将告诉 Scala 如何创建数组。这是必要的,因为数组没有被删除在Java中,所以Scala必须向Java提供精确的类型。

问题是:Java 中没有这样的类型。

我确实想知道 Scala 是否无法使用Object这里。票可能是有序的,但不要指望它是可能的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

清单与类清单。这个 Scala 错误是什么意思? 的相关文章

随机推荐