我正考虑在一个文件中为String添加全局扩展方法,无论我在哪里使用String,我都可以使用此扩展名。
但是我没有找到办法这样做......我现在只是将扩展名粘贴到各处。
在A.kt中的扩展:
class A{
......
fun String.add1(): String {
return this + "1"
}
......
}
并在B.kt中这样访问:
class B{
fun main(){
......
var a = ""
a.add1()
......
}
}
我尝试过,我可以添加static
和final
,但没有任何效果。
答案 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"