当前位置: 首页 > 知识库问答 >
问题:

(科特林) 延迟属性 “VAL 变量” 尚未初始化

林烨烨
2023-03-14

有人以前有过类似的问题吗?

如何声明init()的默认变量值?

下面是我的代码示例,

@Value("\${app.email-config-file: D:\\email\\src\\main\\resources\\email.config}")
private lateinit var emailDir: String 

init {
    log.info("====================================================================================================")
    log.info("Email Config File Dir: ${this.emailDir}")
    log.info("====================================================================================================")
}

然后在下面抛出异常:

起因:科特林。UninitializedPropertyAccessException:late init属性emailDir尚未初始化

任何解决方案都可以共享?

共有3个答案

齐鹏程
2023-03-14

我想你用的是spring和他的DI。

问题是您在创建实例之前调用了电子邮件字段,如果没有任何实例,则无法注入依赖项。要解决此问题,请在构造函数中设置依赖项。

@Component
class Foo @Inject constructor(@param:Value("\${some.property}") val emailDir: String)
{
    init
    {
        log.info("=============================================================")
        log.info("Email Config File Dir: ${this.emailDir}")
        log.info("=============================================================")
     }
}
文嘉禧
2023-03-14

如何声明init()的默认变量值?

一旦有了默认值,该属性就不必标记为lateinit。因此,您只需:

@Value("\${app.email-config-file: D:\\email\\src\\main\\resources\\email.config}")

private var emailDir: String = "someDirectory/"

init {
    log.info("=============================================================")
    log.info("Email Config File Dir: ${this.emailDir}")
    log.info("=============================================================")
}
柴瀚昂
2023-03-14

在实际设置值之前,无法访问 Kotlin lateinit var 属性,在这种情况下,将引发未初始化的属性访问异常

根据我在代码中看到的,您希望属性值由框架(Spring?)设置基于@Value注释。但是,您可以访问init块中的属性,该块在对象构造时执行,我敢肯定,框架只有在构造对象之后才设置值。

您可以避免在设置属性值之前使用它(不要在< code>init块和其他属性初始化器中使用它),或者为属性提供一个默认值,如@wasyl的回答。

 类似资料:
  • 这是我的主要功能 我在我的主类中调用它,并且一切正常,我可以得到响应。 当我想为它编写测试时,我遇到了错误“kotlin.UninitializedPropertyAccessException:lateinit属性客户端尚未初始化”,有人能帮我吗?"

  • 我想在Spring靴中通过kotlin在另一个类中注入一个单例。 S.kt WorkingGroup.kt 通过这段代码,我得到以下错误: 我搜索了这个错误,发现了一些类似的结果,但是问题没有解决。< br >在kotlin中,如何在伴随对象中注入服务?

  • 函数用于将包含空格或 的字符串转换为帕斯卡大小写。 以下是我的代码- 我在变量之前使用了keyword。在for循环中,我已初始化变量,但编译器仍抛出以下错误- 麻烦帮我下码谢谢

  • Json服务器数据显示,在使用retrofit2和rxjava2的android中,当参数传递给inteface时,会出现错误。 接口

  • 我不知道这是怎么回事 主要活动 我遇到了这个问题 2022-03-18 09:18:27.393 13874-13874/com。实例githubuser2 E/AndroidRuntime:致命异常:主进程:com。实例githubuser2,PID:13874 java。lang.RuntimeException:无法启动活动组件信息{com.example.githubuser2/com.e

  • 我有一个类,我注入到ViewModel ViewModel工厂,当在活动中的onCreate方法中初始化视图模型时,它说传递的值没有初始化。 下面是我的代码 我对Kotlin很陌生,所以尝试过调试,但在这个问题上卡住了。 这是Mainactive代码: 我的ViewModelFactory: 我的班级回购: 这是我收到的错误: