如何使用自定义 class 对象正确实现 lateinit,以便在 android 中的 onCreate() 中使用,避免 'Property getter or setter expected' 错误

How to implement lateinit properly with custom class objects for use in onCreate() in android avoiding 'Property getter or setter expected' error

我正在尝试使用 Kotlin 实现 Dialogflow(以前的 api.ai)代理与我的 Android 应用程序的集成。我检查了关于 kotlin lateinit 的其他问答,Android 中的 onCreate() 生命周期非常适合后期初始化实现,以避免使用空对象和相应的 !! 和 [=17 编写脏代码=] 在 Kotlin 中访问。但是我 运行 在尝试 lateinint 实例时陷入了“属性 getter 或 setter expected” 的错误自定义 class。这是代码:

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 class 进行一些更改?请清楚地解释整个概念。

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

lateinit var settingsManager: SettingsManager

而不是

var lateinit settingsManager: SettingsManager

希望对您有所帮助。