原始类型的属性-Kotlin

时间:2018-12-10 16:58:34

标签: spring kotlin properties-file

尝试将环境变量值分配给lateinit变量时遇到错误。 错误是“原始类型的属性上不允许使用'lateinit'修饰符”

我的application.properties(读取环境变量)

my.property.from.properties.file=true

MyService类:

@Component
class MyService @Autowired constructor(
    private val someService: SomeService) {

    @Value("\${my.property.from.properties.file}")
    private lateinit var myBooleanEnabled: Boolean

为其分配值不能解决问题。例如,使用

private lateinit var myBooleanEnabled: Boolean = true

我遇到2个错误:

    原始类型的属性上不允许
  • 'lateinit'修饰符
  • 带有初始化器的属性上不允许
  • 'lateinit'修饰符

对于我所读的内容,我需要一个委托(https://kotlinlang.org/docs/reference/delegated-properties.html),但我无法完全掌握。另外,如果有“更清洁”的解决方案,我也不必编写其他方法来设置属性。 有什么想法吗?

2 个答案:

答案 0 :(得分:0)

最简单的方法是将myBooleanEnabled定义为可空值并删除lateinit

private var myBooleanEnabled: Boolean? = null

在这种情况下,它不会被解释为字节码中的原始boolean

但是,在您的情况下,我建议您进行构造函数注入。

答案 1 :(得分:0)

您可以使用构造函数注入,如下所示。如果您使用的是Spring 4.3+,则不需要@Autowired批注。 Spring文档对此有一些指导:

https://docs.spring.io/spring/docs/current/spring-framework-reference/languages.html#injecting-dependencies

@Component
class MyService(
    private val someService: SomeService,
    @Value("\${my.property.from.properties.file}")
    private val myBooleanEnabled: Boolean)