看起来注释需要Java中的常量。我想这样做:
object ConfigStatics {
final val componentsToScan = Array("com.example")
}
@PropertySource( ConfigStatics.componentsToScan ) // error: constant value required
class MyConfig extends WebMvcConfigurerAdapter {
}
,其中
@PropertySource( Array("com.example") )
class MyConfig extends WebMvcConfigurerAdapter {
}
很好。
可悲的是,scala不会将静态最终值视为常量值。
这里有什么可做的,或者它是不可能在scala中使用命名常量?
答案 0 :(得分:4)
在我可以更改包含值的意义上,componentstoScan
不是常数:
object ConfigStatics {
final val componentsToScan = Array("com.example")
componentsToScan(0) = "com.sksamuel"
}
这将有效
object ConfigStatics {
final val componentsToScan = "com.example"
}
@PropertySource(Array(ConfigStatics.componentsToScan))
class MyConfig extends WebMvcConfigurerAdapter {
}
答案 1 :(得分:4)
这看起来像个错误。
SLS 6.24表示文字数组Array(c1, c2, ...)
是一个常量表达式。
SLS 4.1表示常量值定义final val x = e
表示x
替换为e
。
它不起作用,所以要么是规范错误,要么是实现错误。
final val j = Array(1,2,3)
def k = j // j
final val x = 3
def y = x // 3
这是this question的副本,其中反义词承诺打开一张关于它的票据。
那是三年前的事。我想知道他的终端上是否还有一个黄色的帖子?