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

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

沈宇定
2023-03-14

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

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

其中 ActionUDT.CLAZZ 定义为常量值:

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)
                                    ^

为什么会产生这样的误报?是bug吗?我用的是Scala 2.10.5

共有3个答案

严誉
2023-03-14

不是此处定义的常量对象。常数是..井。。数字或字符串文本中的常量。

谢诚
2023-03-14

正好碰到这个问题。结果是,< code>scaladoc甚至没有尝试查看给定的表达式最终是否返回一个常数。所以我的错误是:

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

在代码中,这只是将< code>someString1和< code>someString2连接起来。。修改代码,这样就没有字符串连接了,问题就解决了。

燕刚捷
2023-03-14

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

@SQLUserDefinedType(udt = classOf[ActionUDT])
 类似资料:
  • 问题内容: 考虑以下代码: 无需添加方法签名即可编译该代码。(它与同样表现到位,太)。 我理解为什么 可以 安全地运行它,因为实际上不能将其引发在块中,因此不能引发已检查的异常。我有兴趣知道在何处指定此行为。 并非永远都不会达到目标:以下代码也会编译: 但是,如果抛出一个检查的异常,它不会像我期望的那样编译: 在JLS Sec 11.2.2中 ,它说: 一,其抛出的表达式语句(§14.18)具有静

  • 本章将介绍Rust编译器的参数。 Rust编译器程序的名字是rustc,使用它的方法很简单: $ rustc [OPTIONS] INPUT 其中,[OPTIONS]表示编译参数,而INPUT则表示输入文件。而编译参数有以下可选: -h, --help - 输出帮助信息到标准输出; --cfg SPEC - 传入自定义的条件编译参数,使用方法如 fn main() { if cfg!(he

  • 本文向大家介绍C++常量详解二(常量形参,常量返回值,常量成员函数),包括了C++常量详解二(常量形参,常量返回值,常量成员函数)的使用技巧和注意事项,需要的朋友参考一下 1.常量形参 当形参有顶层const或者底层const的时候,传给它常量对象或者非常量对象都是可以的,在这里我们主要考虑形参无const, 而实参有const的情况,其实这里也十分简单,只需要记住一点:底层const的限制,就可

  • 问题内容: 行给出了编译错误。 为何不允许这样做的任何特定原因?如何使用数组常量初始化String数组? 编辑:谢谢大家的回答。现在,我很清楚什么是允许的,什么是不允许的。但是我能问你 为什么 不允许这样做吗? 仔细搜索一下之后,我发现了这个链接,在其中,被告知像这样的编码使编译器不明确- 宠物应该是String数组还是Objects数组。但是,从声明中可以很好地看出它是一个String数组,对吗

  • 我有以下代码,这是我的API的艺术 如果我有@ApiParam注释,@PathVariable就变成非必需的,所以如果我没有输入userId并通过Swagger UI发出请求,请求仍然会转到服务器,这会导致不必要的服务器错误。默认情况下,@Path变量的参数“必需”为true(因此,默认值为@PathVariable(name=“userId”,必需=true)),并且在该参数上没有@ApiPar

  • 我想执行mysql插入查询使用Hibernate,我有这个: 我发生了以下异常:, 线程“main”组织中出现异常。冬眠QueryParameterException:位置超出已声明序数参数的数量。请记住,序数参数是基于1的!职位:1 这里怎么了?