如何使用自定义 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
希望对您有所帮助。
我正在尝试使用 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
希望对您有所帮助。