【问题标题】:Scala compiler error on wildcard Array with val带有 val 的通配符数组上的 Scala 编译器错误
【发布时间】:2012-08-08 21:29:15
【问题描述】:

以下代码在构造函数参数用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 required: array[java.lang.Object]

无法给出行号。

【问题讨论】:

  • 在 2.9 和 2.10 中都无法重现该错误。您确定错误是由 val 关键字引起的吗?
  • 将 val 放入其中会中断。如果我有一个成员 val 并将构造函数参数分配给它,那么它就可以工作(这就是我正在做的)。我将使用堆栈跟踪更新我的问题。你用的是什么版本的2.9?我还应该指出,我正在为我的构建使用 scala maven 插件,所以如果它对你有用(在“普通”scala 中)那么它可能在我的堆栈中出错。

标签: scala


【解决方案1】:

看起来像 Scala 编译器中的一个错误(它死于异常)。您可能应该向 Scala 开发人员报告。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2020-12-13
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多