【问题标题】:declare global variable in kotlin defaulted to a property value在 kotlin 中声明全局变量默认为属性值
【发布时间】:2021-10-24 18:46:58
【问题描述】:

我正在尝试直接从 application.yml 加载 kotlin 中的全局变量:

telegram:
  token: foo

为了实现这一点,我在课堂上尝试过:

@Value("\${telegram.token}")
val botToken: String

但是它抛出一个错误,说我需要初始化属性。 (例如,这不会引发错误,但这不是我的预期行为):

@Value("\${telegram.token}")
val botToken: String = ""

我想要的是将配置值(foo)注入到这个常量(botToken)中。

【问题讨论】:

    标签: kotlin micronaut


    【解决方案1】:

    要么将其作为参数添加到包含该属性的 bean 的构造函数中:

    class WhateverSpringManagedBeanClass(
        @Value("\${telegram.token}") private val botToken: String
    )
    

    或尝试以下操作(这会使 botToken 可变):

    @Value("\${telegram.token}")
    lateinit var botToken: String
    

    【讨论】:

    • 这会起作用,但它会将 val 更改为 var,因此在此之后它将是可变的,对吗?是不是有类似于 vals 的 lateinit var 的东西?
    • 如果您将botToken 转换为构造函数参数,您可以。我已经用一个例子更新了我的答案。
    • 好的,我接受了您的回答,但如果您添加注释说明 lateinit var 会使其可变,我将不胜感激,因为我要求将其保留在常量字段中。
    • 当然可以;)
    【解决方案2】:

    首先,您似乎可以使用@Property(name = "telegram.token")

    然后我会尝试

    @Property(name = "telegram.token")
    lateinit var token: String
        private set
    

    【讨论】:

    • 正如我在 Joao 的回答中提到的那样,我想避免将字段更改为 lateinit var,因为我不希望令牌是可变的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2013-06-08
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    相关资源
    最近更新 更多