期望科特林中声明变量的成员声明错误

Expect member declaration error on declared variables in kotlin

我是 kotlin 的初学者,在尝试使用变量时遇到了错误。我需要帮助。这是我的代码

package com.example.myapplication
import java.util.*
class savedData(hour:Int, Minutes:Int) {
  var calendar= Calendar.getInstance()
  calendar.set(Calendar.HOUR_OF_DAY,hour )
  calendar.set(Calendar.MINUTE,Minutes )
  calendar.set(Calendar.SECOND,0 )
}

我在上面的代码中使用日历变量时出现错误

您的各种 calendar.set 调用需要在 init 块内:

class savedData(hour: Int, minutes: Int) {

    var calendar = Calendar.getInstance()

    init {
        calendar.set(Calendar.HOUR_OF_DAY, hour)
        calendar.set(Calendar.MINUTE, minutes)
        calendar.set(Calendar.SECOND, 0)
    }
}

Class-level 语句只能是 属性 声明,而不是初始化它们的代码。

另一种方法是使用范围函数,例如 apply:

class savedData(hour: Int, minutes: Int) {

    var calendar = Calendar.getInstance().apply {
        set(Calendar.HOUR_OF_DAY, hour)
        set(Calendar.MINUTE, minutes)
        set(Calendar.SECOND, 0)
    }
}

这会起作用:

class savedData(hour:Int, Minutes:Int) {
     var calendar= Calendar.getInstance().apply{
         this.set(Calendar.HOUR_OF_DAY,hour )
         this.set(Calendar.MINUTE,Minutes )
         this.set(Calendar.SECOND,0)
     }
}

在 class 主体中,声明了它的属性和方法。可执行代码必须在这些方法内部(或在 init {} 块中,或在某些 setters/getters 中,或在上述范围函数中),而不是在 class.

的主体中

其他2个答案基本正确。但是,您可能也有兴趣以 lazy 的方式初始化 属性,这样只要不需要它,它就不会被初始化:

class savedData(hour:Int, Minutes:Int) {
    var calendar: Calendar by lazy {
        Calendar.getInstance().apply {
            set(Calendar.HOUR_OF_DAY, hour)
            set(Calendar.MINUTE, Minutes)
            set(Calendar.SECOND, 0)
        }
    }
}

这对于使用 resource-intensive init 进程创建 class 的实例特别有用。