Kotlin 编译器抱怨在 属性 定义中使用 SPeL 表达式。为什么?
Kotlin compiler complains about using a SPeL expression in a property definition. WHY?
当我尝试使用 SPeL 表达式注入一个值时,它在 Java 中有效,但在 Kotlin 中无效。编译器说
Error:(13, 25) Kotlin: An annotation parameter must be a compile-time constant
代码:
@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?这是一个构造注入(或者是)并且不违反不变性。
这是编译器错误吗?该消息是无可辩驳的错误。
${roots}
在 Kotlin 中的字符串中是一个 string template,因此该字符串不是常量。
如果您希望字符串包含那些实际字符而不被解释为模板,则必须转义 $
:
@Value("#{new java.io.File('${roots}')}")
当我尝试使用 SPeL 表达式注入一个值时,它在 Java 中有效,但在 Kotlin 中无效。编译器说
Error:(13, 25) Kotlin: An annotation parameter must be a compile-time constant
代码:
@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?这是一个构造注入(或者是)并且不违反不变性。
这是编译器错误吗?该消息是无可辩驳的错误。
${roots}
在 Kotlin 中的字符串中是一个 string template,因此该字符串不是常量。
如果您希望字符串包含那些实际字符而不被解释为模板,则必须转义 $
:
@Value("#{new java.io.File('${roots}')}")