Android开发中Kotlin合约的用例是什么

时间:2019-10-15 15:31:27

标签: android kotlin

我一直在研究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方法仅被调用一次。

此检查的实际好处是什么?何时使用?因为我认为它的代码更多,可读性更差。

1 个答案:

答案 0 :(得分:2)

在Kotlin 1.3中添加了合同,但是apply一直存在。约定只是编译器提示,并且允许诸如apply之类的函数具有其他用例(例如初始化val的能力)。

apply通常用于代码简洁。您的示例是一个极端案例,在该案例中代码是否更干净尚值得商bat。如果您要在一个对象上调用一系列设置函数,那么显然对于简化和简洁化很有帮助。