如何从Java调用Kotlin标准库函数?

Ant*_*gin 4 java android kotlin

动机:

在我们的Android项目中,我们有很多类似的验证str != null && !str.isEmpty(),所以我决定将它们重构为辅助方法。我暂时使用以下类作为助手:

public class StringUtil {
    public static boolean isNullOrEmpty(@Nullable String str) {
        return str == null || str.isEmpty();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题:

我们已经有了一个用 Kotlin 编写的字符串辅助类(例如 String.kt)。因此,是否有两个助手(一个在 Java 中,一个在 Kotlin 中)并不清楚。

我尝试过的:

在 String.kt 中复制粘贴的天真方法isNullOrEmpty()没有成功,因为它$reciever是 null,所以它崩溃了。

其次,我尝试使用isNullOrEmpty()kotlin.text 中的 Kotlin 原生(https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/is-null-or-empty.html):

public inline fun CharSequence?.isNullOrEmpty(): Boolean
Run Code Online (Sandbox Code Playgroud)

但我不知道如何从 Java 调用它。此页面(https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html)不提供任何建议。

问题不在于从 Java 访问 Kotlin 扩展函数。我的扩展是完全可见的,但由于空接收器而崩溃。正如我在下面提到的,问题更多是关于访问本机库代码,而不是我自己的扩展。

有什么帮助吗?

yol*_*ole 5

一些标准库函数(包括这个函数)都标有 @InlineOnly 注释,这使得它们无法从 Java 访问。对于大多数其他功能,您可以完全按照作为副本链接的问题中的描述来访问它们。