scala注释参数需要为常量,但final val不允许为常量
在这个片段中scala注释参数需要为常量,但final val不允许为常量,scala,compiler-errors,annotations,Scala,Compiler Errors,Annotations,在这个片段中 @SwaggerDefinition(...authorizationUrl = SecurityConstants.authorizationUrl) 鉴于此 final object SecurityConstants { final val authorizationUrl: String =.. } (两次总决赛中只有一次还行,但仍然如此) 我曾期望/希望它能用2.12.3编译,但它却给了我很大的帮助 “注释参数必须是常量;找到:SecurityConstants
@SwaggerDefinition(...authorizationUrl =
SecurityConstants.authorizationUrl)
鉴于此
final object SecurityConstants {
final val authorizationUrl: String =..
}
(两次总决赛中只有一次还行,但仍然如此)
我曾期望/希望它能用2.12.3编译,但它却给了我很大的帮助
“注释参数必须是常量;找到:SecurityConstants.authorizationUrl
[错误]authorizationUrl=SecurityConstants.authorizationUrl,”
在注释中调用Java静态方法System.getenv(“a”)也会带来相同的错误,即
@SwaggerDefinition(...authorizationUrl = System.getenv("a"))
请帮忙,
Nicu M
final val
引用可以在两种情况下用作Java注释参数:
最终值的值必须是文字
最终val的类型
final val authorizationUrl = "http://something.com"
但这些将不起作用:
final val authorizationUrl = "http://something.com".trim
final val authorizationUrl: String = "http://something.com"
第2个条件可能看起来特别奇怪,但编译器需要在内部保留信息,即
最终val
不仅包含字符串,还包含某个特定的文本字符串值(编译器必须推断a)。在
final val authorizationUrl: String =..
在Scala和Java中,注释参数必须是编译时的常量,而不仅仅是“final”。因此,直接或通过中间val
执行System.getenv(“a”)
(或任何其他函数调用)不会执行此操作,因为这不是编译时常量。这样做是因为注释被设计为在编译时可自省,即,如果您只有一个.class
文件,则必须能够获得注释的所有字段的值。因此编译器必须在编译时知道所有的值
更新
实际上,Swagger本身依赖于编译时的内省。那么,您希望它对您的System.getenv
调用有什么作用呢?Swagger应该为这种注释生成什么规范?你为什么需要它呢?如果您有多个环境,您应该将产品的URL(即外部用户访问的URL)放入定义中。没有授权URL
,其他部分似乎也有不同的键。你确定你在代码中使用了正确的密钥吗?@GáborBakos,我相信这里引用的内容与[OAuth2Definition]的一部分有关(