kotlin扩展方法访问另一个kt

Dra*_*lea 8 kotlin kotlin-extension

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

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

在A.kt扩展:

class A{
    ......
    fun String.add1(): String {
        return this + "1"
    }
    ......
}
Run Code Online (Sandbox Code Playgroud)

在B.kt中这样访问:

class B{
    fun main(){
        ......
        var a = ""
        a.add1()
        ......
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经试过everyting我可以添加像staticfinal,但毫无效果.

zsm*_*b13 14

确保您的扩展函数是顶级函数,并且不嵌套在类中 - 否则它将是成员扩展,只能在它所在的类中访问:

package pckg1

fun String.add1(): String {
    return this + "1"
}
Run Code Online (Sandbox Code Playgroud)

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

package pckg2

import pckg1.add1

fun x() {
    var a = ""
    a.add1()
}
Run Code Online (Sandbox Code Playgroud)

  • 我在一个类中写了扩展!这就是我失败的原因! (3认同)
  • 这里也一样,在一个班级里:) (2认同)

mar*_*ran 10

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

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