Kotlin编译器抱怨在属性定义中使用SPeL表达式。为什么?

时间:2017-06-12 18:53:17

标签: spring spring-boot kotlin spring-el

当我尝试使用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表达式并且不喜欢它。

我的问题:

  1. 为什么Kotlin不喜欢SPeL?这是施工注塑(或是它)并且不违反不变性。

  2. 这是编译错误吗?这条消息无可辩驳。

1 个答案:

答案 0 :(得分:17)

Kotlin中String内的

${roots}string template,因此String不是常量。

如果您希望String包含那些实际字符而不是解释为模板,则必须转义$

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