原始类型的属性不允许使用“lateinit”修饰符 - Kotlin

Jon*_*nyD 6 spring properties-file kotlin

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

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

my.property.from.properties.file=true
Run Code Online (Sandbox Code Playgroud)

我的服务类:

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

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

给它赋值并不能解决问题。例如,与

private lateinit var myBooleanEnabled: Boolean = true
Run Code Online (Sandbox Code Playgroud)

我收到 2 个错误:

  • 原始类型的属性不允许使用“lateinit”修饰符
  • 带有初始值设定项的属性不允许使用“lateinit”修饰符

根据我读到的内容,我需要一个委托(https://kotlinlang.org/docs/reference/deleated-properties.html),但我无法完全掌握它。另外,如果有“更干净”的解决方案,我不想编写另一个方法来设置属性。有任何想法吗?

Ser*_*kin 6

最简单的事情就是定义myBooleanEnabled为可空并删除lateinit

private var myBooleanEnabled: Boolean? = null
Run Code Online (Sandbox Code Playgroud)

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

但是,就您而言,我建议构造函数注入。