我一直在研究Google的Architecture示例。
https://github.com/android/architecture-samples/tree/master
我注意到contracts
例如:在TasksActivity
中,我们找到以下代码:
private fun setupNavigationDrawer() {
drawerLayout = (findViewById<DrawerLayout>(R.id.drawer_layout))
.apply {
setStatusBarBackground(R.color.colorPrimaryDark)
}
}
在contracts
之前,我们应该这样写:
private fun setupNavigationDrawer() {
drawerLayout = (findViewById(R.id.drawer_layout))
drawerLayout.setStatusBarBackground(R.color.colorPrimaryDark)
}
单击apply
时,我们会看到InvocationKind.EXACTLY_ONCE
,该合同似乎确保setStatusBarBackground
方法仅被调用一次。
此检查的实际好处是什么?何时使用?因为我认为它的代码更多,可读性更差。
答案 0 :(得分:2)
在Kotlin 1.3中添加了合同,但是apply
一直存在。约定只是编译器提示,并且允许诸如apply
之类的函数具有其他用例(例如初始化val
的能力)。
apply
通常用于代码简洁。您的示例是一个极端案例,在该案例中代码是否更干净尚值得商bat。如果您要在一个对象上调用一系列设置函数,那么显然对于简化和简洁化很有帮助。