当前位置: 首页 > 知识库问答 >
问题:

带有val的通配符数组上的Scala编译器错误

甄德寿
2023-03-14

当构造函数参数使用 val 声明时,下面的代码失败

作品:

class Poso(array : Array[_ <: Any])
object Test {
  new Poso(classOf[Retention].getEnumConstants())
}

不工作:

class Poso(val array : Array[_ <: Any])
object Test {
  new Poso(classOf[Retention].getEnumConstants())
}

编译器给出错误:

Scala编译器中的错误:类型不匹配;找到:java.lang.Object必需:array[java.lang.Object]

而不能给出行号。

共有1个答案

斜浩穰
2023-03-14

看起来像Scala编译器中的一个bug(它在一个异常上死亡)。你应该向Scala开发者报告。

使用< code>AnyRef而不是< code>Any为我修复了它:

class Poso(val array : Array[_ <: AnyRef])
object Test {
  new Poso(classOf[java.lang.annotation.Retention].getEnumConstants())
}
 类似资料:
  • 考虑以下示例: 我知道下界通配符接受通配符中给定类的所有超类(这里是IOException)。 为什么在上述情况下编译器会显示编译错误?

  • 的类型应该是什么?Eclipse建议使用,但我试图获得更具体的信息。

  • 我不明白为什么会出现这些编译错误: 1: 类型列表中的add(capture#1-of?extends Exec.Bird)方法不适用于参数(Exec.Sparrow) 2: 方法添加(捕获#2-of?扩展Exec.Bird)类型列表中的参数(Exec.鸟)

  • 问题内容: 让我们首先考虑一个简单的场景(请参阅ideone.com上的完整源代码): 这两个通配符是无关的,这就是为什么你可以doNothing使用和a 进行调用的原因。换句话说,两者?可以指完全不同的类型。因此,以下内容无法编译,这是可以预期的(同样在ideone.com上): 到目前为止,一切都很好,但是这里的事情开始变得非常混乱(如ideone.com所示): 上面的代码可以在Eclips

  • 我试图使用JSoup从超文本标记语言文档中选择一些文本。 我感兴趣的超文本标记语言是表单的一部分: 我对获取任何

  • null 编译,我真的不明白为什么。基本上与第1行相同的问题。是的超类,如何将超类的成员放入此中? 编译。与第1行相同的问题。