在android java类中使用Kotlin扩展

Inf*_*0re 9 android kotlin kotlin-extension

是否可以在android java类中使用kotlin扩展?例:

fun String.getSomething(): String {
    return "something"
}
Run Code Online (Sandbox Code Playgroud)

然后在Java中使用它:

String someString = "blabla";
someString.getSomething();
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Ale*_*lov 26

Kotlin的扩展函数被编译为JVM方法,将接收器作为第一个参数.如果您的扩展函数在顶层声明,例如在名为的文件中file.kt:

package foo

fun String.getSomething(): String {
    return "something"
}
Run Code Online (Sandbox Code Playgroud)

然后,在Java中,您可以从相应的文件类中调用静态方法:

import foo.FileKt;

...

String someString = "blabla";
FileKt.getSomething(someString);
Run Code Online (Sandbox Code Playgroud)

  • 不,你不能.包中的扩展函数/属性仅仅是静态方法的语法糖,它们不会也不能更改相应的接收器类.在这方面,Java也不是可扩展的语言,Java语言规范中没有任何内容允许这样做. (4认同)

lig*_*igi 5

你可以混合使用kotlin和java(在java类中使用/调用kotlin类)但是你想要的是在java中使用kotlin特性 - 这是不可能的