gpt4 book ai didi

kotlin - 构造函数可见性仅限于文件

转载 作者:行者123 更新时间:2023-12-02 01:09:31 26 4
gpt4 key购买 nike

我想创建一种更简单的方法来处理 SharedPreferences。我想这样调用它

获取偏好:

val email = SharedPrefs.userdata.email
val wifiOnly = SharedPrefs.connections.wifiOnly

设置偏好:

SharedPrefs.userdata.email = "someone@example.com"
SharedPrefs.connections.wifiOnly = true

我可以这样做:

App.instance 在以下代码段中返回一个 Context 对象

object SharedPrefs {

val userdata by lazy { UserPreferences() }
val connections by lazy { ConnectionPreferences() }

class UserPreferences {

private val prefs: SharedPreferences = App.instance.getSharedPreferences("userdata", Context.MODE_PRIVATE)

var email: String
get() = prefs.getString("email", null)
set(value) = prefs.edit().putString("email", value).apply()
}

class ConnectionPreferences {

private val prefs: SharedPreferences = App.instance.getSharedPreferences("connections", Context.MODE_PRIVATE)

var wifyOnly: Boolean
get() = prefs.getBoolean("wifiOnly", false)
set(value) = prefs.edit().putBoolean("wifyOnly", value).apply()
}

}

问题是这仍然可以调用:SharedPrefs.UserPreferences()我能否使此构造函数仅对此文件或对象私有(private)?

最佳答案

可以把接口(interface)和实现类分开,让后者private给对象:

object SharedPrefs {
val userdata: UserPreferences by lazy { UserPreferencesImpl() }

interface UserPreferences {
var email: String
}

private class UserPreferencesImpl : UserPreferences {
private val prefs: SharedPreferences =
App.instance.getSharedPreferences("userdata", Context.MODE_PRIVATE)

override var email: String
get() = prefs.getString("email", null)
set(value) = prefs.edit().putString("email", value).apply()
}


// ...
}

或者,如果您正在开发一个库或者您有一个模块化架构,您可以使用 internal visibility限制模块可见性的修饰符:

class UserPreferences internal constructor() { /* ... */ }

关于kotlin - 构造函数可见性仅限于文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45714429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com