当我尝试使用SPeL表达式来注入一个值时,它可以在Java中运行,但不能在Kotlin中运行。编译器说
错误:(13,25)Kotlin:注释参数必须是编译时常量
代码:
@SpringBootApplication
open class DeDup(@Value("#{new java.io.File('${roots}')}") val roots: Set<File>,
@Value("algo") val hashAlgo: String,
@Value("types")val fileTypes: List<String>) {
}
fun main(args: Array<String>) {
SpringApplication.run(DeDup::class.java, *args)
}
嗯...新闻快讯Kotlin编译器:它是一个常数!编译器清楚地知道它是一个SPeL表达式并且不喜欢它。
我的问题:
为什么Kotlin不喜欢SPeL?这是施工注塑(或是它)并且不违反不变性。
这是编译错误吗?这条消息无可辩驳。
答案 0 :(得分:17)
${roots}
是string template,因此String不是常量。
如果您希望String包含那些实际字符而不是解释为模板,则必须转义$
:
@Value("#{new java.io.File('\${roots}')}")