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

我正在尝试使用Kotlin实现Dialogflow(之前的api.ai)代理与我的Android应用程序的集成。 我检查了关于kotlin lateinit其他问答,Android中的onCreate()生命周期是晚期init实现的理想选择,以避免用空对象编写脏代码和相应的!!? 访问Kotlin。 但是在尝试lateinint自定义类的实例时,我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行的’ Property getter或setter expected ‘的lateinit settingsManager 。 这是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 

希望这可以帮助。