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表达式,并不喜欢它。

我的问题:

  1. Kotlin为什么不喜欢SPeL? 这是一个施工注射(或是否),不违反不变性。

  2. 这是一个编译器错误? 这个消息是无可辩驳的错误。

Kotlin中的一个字符串中的 ${roots}是一个字符串模板 ,因此该字符串不是一个常量。

如果你想要字符串包含这些实际的字符,而不是被解释为模板,你必须逃避$

 @Value("#{new java.io.File('\${roots}')}") 
Interesting Posts