期望科特林中声明变量的成员声明错误
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 的实例特别有用。
我是 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 的实例特别有用。