我正在尝试从我的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为一个非内联函数创建的函数对象。为什么?
这是我用来学习kotlin协同程序的一些测试代码。代码按预期工作,大约需要1秒来打印总和,但现在如果我用阻塞调用(如网络请求)替换延迟(1000),那么代码大约需要10秒来打印总和(每个调用大约需要1秒),但如果我将网络调用包装在withContext中并使用IO调度程序,则需要1秒来打印总和,因为它是在不同的线程上运行的。延迟函数是否使用某种调度程序来解除线程阻塞?