我可以向 Java 类添加 Kotlin 扩展函数吗?

Kam*_*mil 1 extension-methods kotlin

我正在尝试创建这样的扩展函数:

fun UHFTAGInfo.toReadUhfTagInfo(): ReadUhfTagInfo {
    return ReadUhfTagInfo(this.epc, this.count, this.rssi.toIntOrNull())
}
Run Code Online (Sandbox Code Playgroud)

它应该转换UHFTAGInfo(从 java 库)到ReadUhfTagInfo(我在 Kotlin 中的类)。

我尝试像这样使用它:

UHFTAGInfo i = getUHFTAGInfo();
ReadUhfTagInfo ri = i.toReadUhfTagInfo();
Run Code Online (Sandbox Code Playgroud)

此时我的toReadUhfTagInfo函数位于顶层,但最后我想将它放在我的 ReadUhfTagInfo 类中,如下所示:

class ReadUhfTagInfo(var epc: String, var cnt: Int, var rssi: Int?)
{
    fun UHFTAGInfo.toReadUhfTagInfo(): ReadUhfTagInfo {
        return ReadUhfTagInfo(this.epc, this.count, this.rssi.toIntOrNull())
    }
}
Run Code Online (Sandbox Code Playgroud)

Lou*_*man 5

当然,您可以从 Java 调用 Kotlin 扩展函数,但是您不能使用扩展函数语法来调用它们,您必须像静态方法一样调用它们。例如,如果您定义

// file: Foo.kt

fun Bar.baz() { ... }
Run Code Online (Sandbox Code Playgroud)

那么在 Java 中,你可以将其称为

FooKt.baz(bar);
Run Code Online (Sandbox Code Playgroud)