Kotlin从其他类调用成员扩展函数

时间:2018-03-30 15:10:28

标签: android kotlin

我想在多个类中使用此函数:

fun <T> T?.ifNull(function: (T?, s:String) -> Unit) {
}

我该如何做到这一点?

这就是我想用它的方式:

class A{
fun <T> T?.ifNull(function: (T?, s:String) -> Unit) {
    }
}

class B{
constructor(){
    val a = A()
    //I want to use the function here
}}

1 个答案:

答案 0 :(得分:13)

如果将扩展函数定义为类A的成员,则该扩展函数仅在A的上下文中可用。这意味着,您当然可以直接在A内使用它。但是,从另一个班级B,它不是直接可见的。 Kotlin所谓的范围函数,如with,可用于将您的类带入A的范围。以下演示了如何在B内调用扩展函数:

class B {
    init {
        with(A()) {
            "anything".ifNull { it, s -> }
        }
    }
}

作为替代方案,这主要是推荐的方法,您可以在顶层定义扩展函数,即直接在文件中定义:

fun <T> T?.ifNull(function: (T?, s: String) -> Unit) {
}

class A {
    init {
        "anythingA".ifNull { it, s -> }
    }
}

class B {
    init {
        "anythingB".ifNull { it, s -> }
    }
}