Kotlin编译器抱怨在属性定义中使用SPeL表达式。 为什么?
当我尝试使用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) }
嗯…新闻Flash Kotlin编译器:这是一个常数! 编译器清楚地知道这是一个SPeL表达式,并不喜欢它。
我的问题:
-
Kotlin为什么不喜欢SPeL? 这是一个施工注射(或是否),不违反不变性。
-
这是一个编译器错误? 这个消息是无可辩驳的错误。
Kotlin中的一个字符串中的 ${roots}
是一个字符串模板 ,因此该字符串不是一个常量。
如果你想要字符串包含这些实际的字符,而不是被解释为模板,你必须逃避$
:
@Value("#{new java.io.File('\${roots}')}")