如何使用自定义类对象正确实现 lateinit 以在 android 中的 onCreate() 中使用,避免"预期的属性获取者或设置器"错误



我正在尝试使用Kotlin实现Dialogflow(以前的api.ai)代理与我的Android应用程序的集成。我查看了其他问答;Android中的about kotlinlateinit和onCreate()生命周期非常适合后期的init实现,以避免在kotlin中编写带有null对象和相应!!?访问的脏代码。但是,在尝试lateinint自定义类实例时,我遇到了">Property getter or setter expected"的错误。这是代码:

class AIApplication : Application() {
private var activitiesCount: Int = 0
var lateinit settingsManager: SettingsManager
//private set
private val isInForeground: Boolean
get() = activitiesCount > 0
override fun onCreate() {
super.onCreate()
settingsManager = SettingsManager(this)
}

这给了我lateinit settingsManager行上的错误">属性getter或setter expected"。以下是SettingsManager的定义:

class SettingsManager(private val context: Context) {
private val prefs: SharedPreferences
private var useBluetooth: Boolean = false
var isUseBluetooth: Boolean
get() = useBluetooth
set(useBluetooth) {
this.useBluetooth = useBluetooth
prefs.edit().putBoolean(PREF_USE_BLUETOOTH, useBluetooth).commit()
val controller = (context.applicationContext as AIApplication).getBluetoothController()
if (useBluetooth) {
controller!!.start()
} else {
controller!!.stop()
}
}
init {
prefs = context.getSharedPreferences(SETTINGS_PREFS_NAME, Context.MODE_PRIVATE)
useBluetooth = prefs.getBoolean(PREF_USE_BLUETOOTH, true)
}
companion object {
private val SETTINGS_PREFS_NAME = "ai.api.APP_SETTINGS"
private val PREF_USE_BLUETOOTH = "USE_BLUETOOTH"
}
}

那么,正确的方法是什么呢?我需要对SettingsManager类进行一些更改吗?请把整个概念解释清楚。

SettingsManager的lateinit声明是错误的。试试这个:
lateinit var settingsManager: SettingsManager

而不是

var lateinit settingsManager: SettingsManager

希望这能有所帮助。

最新更新