在kotlin中使用伴随对象和在java中替换有什么用处

时间:2017-10-06 07:59:45

标签: java android kotlin

companion object {
    var funAfterPermission: (() -> Unit)? = null
}

上述代码段中伴随对象的用途是什么?line

的含义是什么?
 var funAfterPermission: (() -> Unit)? = null

2 个答案:

答案 0 :(得分:1)

你的行意味着有一个名为funAfterPermission的var接受一个函数(high order functions)作为参数,它返回java中的void等效值它接受一个没有参数的方法。 var本身默认为null,可以为null。

var funAfterPermission: (() -> Unit)? = null

示例:

fun test(): (() -> Unit)? {
        println("test")
        return null
}

funAfterPermission = test()

它就像几种语言的eval。它在另一个函数中调用某些东西但是没有分配任何东西,因为它返回Unit。

companion objects用于获取"静态"来自java的行为。您可以使用YourClass.funAfterPermission = ....

访问funAfterPermission

答案 1 :(得分:1)

companion object是Java中单身人士的替代品。

() -> Unit代表一名代表。它可以分为()Unit()表示委托不应接受任何参数。 Unit表示委托不返回任何内容(与Java中的void相同)。组合它们意味着它是一个委托,不需要任何参数,也不会返回任何内容。

(() -> Unit)?表示委托可以为空。

例如,(Int, String) -> String表示它要求第一个参数为Int,第二个参数为String,并返回String

class Foo {
    var greeting: () -> Unit = this::helloWorld
    fun helloWorld() {

    }
    fun hello() {
        greeting()
    }
}

委托由::语法分配,可以像普通函数一样调用。