指定为非空的参数为空

Parameter specified as non-null is null

我在一个较大的项目中有一个函数,该函数在启动时通过另一个函数调用。这是它的代码:

val infoDoc = File("res/info.txt")

private fun readInfo(): MutableList<Reminder> {
    val reminders = mutableListOf<Reminder>()
    infoDoc.forEachLine {
        //...
    }
    return reminders
}

然而,当我尝试 运行 它时,我得到了这个错误:

java.lang.ExceptionInInitializerError
Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.io.FilesKt__FileReadWriteKt.forEachLine, parameter $receiver
    at kotlin.io.FilesKt__FileReadWriteKt.forEachLine(FileReadWrite.kt)
    at kotlin.io.FilesKt__FileReadWriteKt.forEachLine$default(FileReadWrite.kt:154)
    at main.IoKt.readInfo(io.kt:22)
    at main.IoKt.read(io.kt:8)
    at main.AppKt.<clinit>(app.kt:23)
Exception in thread "main"

请注意,Reminder 是自定义的 class,而 infoDoc 是在 app.kt 中声明的。我可以提供所需的任何其他代码。

编辑: 已进行检查以确保 info.txt 存在,并且是 readable/writable。

检查info.txt是否存在,或者尝试绝对文件路径。

异常发生是因为infoDoc还没有初始化。 Kotlin 中的初始化程序是从上到下执行的,因此看起来 app.ktinfoDoc 上面声明的 属性 的初始化程序正在调用 readInfo 函数。

要解决此问题,请将 infoDoc 的声明移至调用 readInfo 的位置上方。