【问题标题】:kotlin.UninitializedPropertyAccessException: lateinit property ans has not been initializedkotlin.UninitializedPropertyAccessException:lateinit 属性 ans 尚未初始化
【发布时间】:2020-09-11 03:02:20
【问题描述】:

toPascalCase 函数旨在将包含空格或- 的字符串转换为 Pascal 大小写。

下面是我的代码->

fun toPascalCase(str: String): String {
    lateinit var ans: String

    for(i in str) {
        if(i != ' ' && i != '-') {
            ans += i
        }
    }
    return ans
}

fun main() {

toPascalCase("Harsh kumar-singh")

} 

我在ans 变量之前使用了lateinit 关键字。在 for 循环中,我已经初始化了 ans 变量,但编译器仍然抛出以下错误 ->

Exception in thread "main" kotlin.UninitializedPropertyAccessException: lateinit property ans has not 
been initialized
at FileKt.toPascalCase (File.kt:10) 
at FileKt.main (File.kt:18) 
at FileKt.main (File.kt:-1) 

请帮我写代码。谢谢

【问题讨论】:

  • “在 for 循环中我已经初始化了 ans 变量”。不,你没有。 ans += i 等价于 ans = ans + i,它读取 before 设置它的值。 lateinit var 最初将持有 null - 您不能将其添加到任何内容中,因此会出现错误。 (lateinit 对局部变量没有意义;它仅适用于在对象之后才能初始化的属性,这是一种相对罕见的情况。即使这样,您仍然需要在使用它之前设置一个值。 )

标签: kotlin kotlin-lateinit


【解决方案1】:

您应该使用简单的 var 将其初始化为空字符串,而不是 lateinit var

fun toPascalCase(str: String): String {
    var ans = ""
    ...

【讨论】:

    猜你喜欢
    • 2021-06-21
    • 2020-04-18
    • 2021-04-02
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 2020-11-01
    • 2020-09-06
    相关资源
    最近更新 更多