Scala编译器抛出注释参数需要是常量参数的常量错误

时间:2016-05-28 18:45:11

标签: scala annotations

我正在使用Spark-SQL附带的以下注释参数:

@SQLUserDefinedType(udt = ActionUDT.CLAZZ)
trait Action extends ActionLike {
...implementation
}

其中ActionUDT.CLAZZ被定义为常量val:

object ActionUDT extends ActionUDT {
  final val CLAZZ: Class[_ <: ActionUDT] = this.getClass
}

但是我收到了以下编译错误:

Error:(25, 37) annotation argument needs to be a constant; found: ActionUDT.clazz
@SQLUserDefinedType(udt = ActionUDT.clazz)
                                    ^

为什么会产生这种误报?这是一个错误吗?我正在使用Scala 2.10.5

3 个答案:

答案 0 :(得分:1)

刚遇到这个问题。事实证明,scaladoc甚至没有尝试查看给定的表达式最终是否返回常量。所以在我的情况下错误是:

error: annotation argument needs to be a constant; found "someString1".+("someString2")

在代码中,这只是简单地连接someString1someString2。 。更改代码,以便没有字符串连接解决问题。

答案 1 :(得分:1)

Class[_] 对我有用的注释中需要 classOf[] 类型的参数时。在您的情况下,您可以尝试

@SQLUserDefinedType(udt = classOf[ActionUDT])

答案 2 :(得分:0)

class不是此处定义的常量对象。常量是..井......一个常数,如数字或字符串文字。