kotlin扩展方法访问另一个kt

时间:2017-07-13 04:45:17

标签: kotlin kotlin-extension

我正考虑在一个文件中为String添加全局扩展方法,无论我在哪里使用String,我都可以使用此扩展名。

但是我没有找到办法这样做......我现在只是将扩展名粘贴到各处。

在A.kt中的扩展:

class A{
    ......
    fun String.add1(): String {
        return this + "1"
    }
    ......
}

并在B.kt中这样访问:

class B{
    fun main(){
        ......
        var a = ""
        a.add1()
        ......
    }
}

我尝试过,我可以添加staticfinal,但没有任何效果。

2 个答案:

答案 0 :(得分:12)

确保你的扩展功能是top level function,并且没有嵌套在一个类中 - 否则它将是一个member extension,只能在它所在的类中访问它。 s in:

package pckg1

fun String.add1(): String {
    return this + "1"
}

然后,如果你对它的使用是在不同的包中,你必须像这样导入它(这也应该由IDE建议):

package pckg2

import pckg1.add1

fun x() {
    var a = ""
    a.add1()
}

答案 1 :(得分:6)

您可以使用with - 函数在定义它的类之外使用成员扩展。在传递给with的lambda中,this将引用您传入的A实例。这将允许您使用A中定义的扩展函数。像这样:

val a =  A()
val s = "Some string"
val result = with(a) {
    s.add1()
}
println(result) // Prints "Some string1"