Vah*_*han 9 android function kotlin
我有静态函数,它仅限于某些上下文,例如仅用于文档。有两种替代方法可以将其定义为顶级函数或对象中的函数。
1.
package com.armsoft.mtrade.data.pref
import com.armsoft.mtrade.App
import com.armsoft.mtrade.domain.model.DocSaveType
object DocPrefManager {
private const val DOC_PREF = "DOC_PREF"
private const val KEY_ORDER_SAVE_TYPE = "KEY_ORDER_SAVE_TYPE"
@JvmStatic
fun setOrderSaveType(orderSaveType: DocSaveType) {
val context = App.getContext()
val sharedPreferences = context.getSharedPreferences(DOC_PREF, 0)
val editor = sharedPreferences.edit()
editor.putString(KEY_ORDER_SAVE_TYPE, orderSaveType.getCode())
editor.commit()
}
}
Run Code Online (Sandbox Code Playgroud)
2.
package com.armsoft.mtrade.data.pref
import com.armsoft.mtrade.App
import com.armsoft.mtrade.domain.model.DocSaveType
fun setOrderSaveType(orderSaveType: DocSaveType) {
val context = App.getContext()
val sharedPreferences = context.getSharedPreferences(DocPrefManager.DOC_PREF, 0)
val editor = sharedPreferences.edit()
editor.putString(DocPrefManager.KEY_ORDER_SAVE_TYPE, orderSaveType.getCode())
editor.commit()
}
Run Code Online (Sandbox Code Playgroud)
顶层函数的优点是不包含在对象中,缺点是可以从任何地方访问而无需类名前缀。对于这种情况,是否有优点或缺点或最佳实践?
Ale*_*nov 12
推荐的做法是永远不要使用 object 来创建命名空间,并在可能的情况下始终使用顶级声明。我们没有发现名称冲突是一个问题,如果确实发生冲突,您可以使用带别名的导入来解决它。
KotlinConf 2017 - 你可以,但你应该吗?Mike Gouline建议我们应该谨慎使用顶级函数,因为它可能会导致“自动完成污染”。
但是,顺便说一句,Andrey Breslav(截至本编辑, Kotlin 团队的前团队负责人)将顶级功能视为他在 KotlinConf 2018 - Closing Panel 中最喜欢的语言功能。
小智 5
多模块项目提示:
使用
internal可见性修饰符将顶级函数的范围限定为其包含的模块,这样它就不会污染无关模块中的 IDE 自动完成功能。
// module A
internal fun doSomething() {
// ...
}
// module B
doSomething() // (!) Cannot access 'doSomething': it is internal in module A
// Does NOT show up in module B's auto-complete
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4316 次 |
| 最近记录: |