我正在尝试从我的Java类中调用此柯特林挂起代码。该解决方案基于此处提到的内容。https://stackoverflow.com/a/52887677/5140533
科特林代码:
Main.kt
suspend fun doWorld() = coroutineScope {
launch {
println("Thread name2 ${Thread.currentThread().name}")
delay(2000L)
println("Hello world")
}
}
@OptIn(DelicateCoroutinesApi::class)
fun doSomethingAsync() =
GlobalScope.future { doWorld() }
转换器.java
public class Converter {
public static void main(String[] args) {
MainKt.doSomethingAsync();
}
}
当我从我的Java类调用doThingAsync()
时,我看不到任何print语句。有人能解释一下到底发生了什么以及我如何纠正这一点吗?
我认为在您的情况下,程序在新的协程开始之前完成。调用main
函数后,尝试延迟当前的Main Thread
MainKt.doSomethingAsync():
public class Converter {
public static void main(String[] args) {
MainKt.doSomethingAsync();
try {
TimeUnit.MILLISECONDS.sleep(2500);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Or use MainKt.doSomethingAsync().get()
}
}
然后我想日志将显示。
动机: 在我们的Android项目中,我们有许多验证,比如
我在kotlin文件中定义了这个函数。 想这样从Java调用它 随着 但它给了我 我意识到lambda函数的参数似乎是< code >列表 如果我把类转换成java,我可以很容易地用lambda回调函数调用那个函数。 我做错了什么
有可能从Java代码中访问扩展函数吗? 我在静态编程语言文件中定义了扩展函数。 其中MyModel是(生成的)java类。现在,我想在我的普通java代码中访问它: 然而,那是行不通的。IDE无法识别bar()方法,编译失败。 work使用kotlin的静态函数: 通过使用导入com.test.extensions.ExtensionsPackage我的IDE似乎配置正确。 我从kotlin文档中
我想为我的游戏创建一个简单的倒计时,当游戏开始时,我想每秒调用这个函数: 我试过这个: 但应用程序不幸停止,第二次调用run函数 3周前,我刚刚开始使用android开发和静态编程语言,到目前为止,我对它了解最多。 在Xcode中使用swift时,我使用了这一行,我认为类似的东西也适用于Kotlin
我知道内联函数可能会提高性能 编译器可以发出以下代码,而不是为参数创建函数对象并生成调用。(来源) 但是我发现没有kotlin为一个非内联函数创建的函数对象。为什么?
主要内容:多个延迟执行语句的处理顺序,使用延迟执行语句在函数退出时释放资源Go语言的 defer 语句会将其后面跟随的语句进行延迟处理,在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。 关键字 defer 的用法类似于面向对象编程语言 Java 和 C# 的 finally 语句块,它一般用于释放某些已分配的资源,典型的例子就是对一个互斥解锁,或者