我正在使用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
答案 0 :(得分:1)
刚遇到这个问题。事实证明,scaladoc
甚至没有尝试查看给定的表达式最终是否返回常量。所以在我的情况下错误是:
error: annotation argument needs to be a constant; found "someString1".+("someString2")
在代码中,这只是简单地连接someString1
和someString2
。 。更改代码,以便没有字符串连接解决问题。
答案 1 :(得分:1)
当 Class[_]
对我有用的注释中需要 classOf[]
类型的参数时。在您的情况下,您可以尝试
@SQLUserDefinedType(udt = classOf[ActionUDT])
答案 2 :(得分:0)
class
不是此处定义的常量对象。常量是..井......一个常数,如数字或字符串文字。