动机:
在我们的Android项目中,我们有许多验证,比如str!=无效的
public class StringUtil {
public static boolean isNullOrEmpty(@Nullable String str) {
return str == null || str.isEmpty();
}
}
问题:
我们已经有一个字符串的助手类,用静态编程语言编写(比如,String.kt)。所以,有两个助手(一个在Java,一个在静态编程语言)是不清楚的。
我尝试的是:
在字符串中复制过去的
isNullOrEmpty()
的简单方法。kt未成功,因为$receiver
为空,所以它崩溃。
其次,我尝试使用Kotlin的native
isNullOrEmpty()
。正文(https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/is-null-or-empty.html):
public inline fun CharSequence?.isNullOrEmpty(): Boolean
但我不知道如何从Java调用它。本页(https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html)不要提供任何建议。
问题不在于从Java访问Kotlin扩展函数。我的扩展是完全可见的,但它崩溃了,因为空接收器。正如我在下面提到的,问题更多的是关于访问本机库代码,而不是我自己的扩展。
需要帮忙吗?
根据@yole的建议,我终于成功地将代码正确地转换为扩展名:
fun String?.isNullOrEmpty(): Boolean = (this == null || this.isEmpty())
所以,问题在于将扩展定义为String
,而不是String
导致$receiver崩溃。(Kotlin在转换为Java时生成隐藏的非空验证,请参见https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#null-(安全性)
或者,可以通过自定义扩展从Java访问标有
@InlineOnly
的标准库函数。
fun String?.isVoid(): Boolean = this.isNullOrEmpty()
我这里的问题是对
的误解
。我先试了一下:
fun String?.isVoid(): Boolean? = this?.isNullOrEmpty()
正如@Moria所提到的,请注意
的行为
-
b?。方法
将返回b。如果b不为null,则返回方法
,否则返回null(https://kotlinlang.org/docs/reference/null-safety.html#safe-(电话)
一些标准库函数,包括这个函数,都用@InlineOnly注释标记,这使得Java无法访问它们。对于大多数其他函数,您可以完全按照链接为副本的问题中所述访问它们。
有可能从Java代码中访问扩展函数吗? 我在静态编程语言文件中定义了扩展函数。 其中MyModel是(生成的)java类。现在,我想在我的普通java代码中访问它: 然而,那是行不通的。IDE无法识别bar()方法,编译失败。 work使用kotlin的静态函数: 通过使用导入com.test.extensions.ExtensionsPackage我的IDE似乎配置正确。 我从kotlin文档中
我在kotlin文件中定义了这个函数。 想这样从Java调用它 随着 但它给了我 我意识到lambda函数的参数似乎是< code >列表 如果我把类转换成java,我可以很容易地用lambda回调函数调用那个函数。 我做错了什么
我想为我的游戏创建一个简单的倒计时,当游戏开始时,我想每秒调用这个函数: 我试过这个: 但应用程序不幸停止,第二次调用run函数 3周前,我刚刚开始使用android开发和静态编程语言,到目前为止,我对它了解最多。 在Xcode中使用swift时,我使用了这一行,我认为类似的东西也适用于Kotlin
我正在尝试从我的Java类中调用此柯特林挂起代码。该解决方案基于此处提到的内容。https://stackoverflow.com/a/52887677/5140533 科特林代码: 当我从我的Java类调用时,我看不到任何print语句。有人能解释一下到底发生了什么以及我如何纠正这一点吗?
我想从静态编程语言代码调用外部命令。 在C/Perl中,我将使用函数 在Python中,我将使用子流程模块 在Go中,我将使用os/exec等 但是在科特林我该怎么做呢?
我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?