我有Kotlin界面
interface FileSystem {
suspend fun getName(path: Path): List<String>
}
Run Code Online (Sandbox Code Playgroud)
我怎么能用Java调用它?什么是
Continuation <? super List<String>>
Run Code Online (Sandbox Code Playgroud)
我正在尝试从Java 7调用Kotlin函数.我正在使用协同程序,这个被调用的函数正在挂起,例如:
suspend fun suspendingFunction(): Boolean {
return async { longRunningFunction() }.await()
}
suspend fun longRunningFunction() : Boolean {
delay(400)
return true
}
Run Code Online (Sandbox Code Playgroud)
我在版本0.25.3中使用协同程序,我可以通过将Continuation<U>实例作为参数传递给挂起函数来模拟简单的Java回调样式,例如
CoroutinesKt.suspendingFunction(new Continuation<Boolean>() {
@Override
public CoroutineContext getContext() {
return EmptyCoroutineContext.INSTANCE;
}
@Override
public void resume(Boolean value) {
doSomethingWithResult(value);
}
@Override
public void resumeWithException(@NotNull Throwable throwable) {
handleException(throwable);
}
});
Run Code Online (Sandbox Code Playgroud)
但是,在更新到完全稳定的1.0.1版本后,我认为它已不再可能.假设暂停函数的更新版本如下所示:
suspend fun suspendingFunction(): Boolean {
return GlobalScope.async { longRunningFunction() }.await()
}
Run Code Online (Sandbox Code Playgroud)
Continuation<U>现在使用Result类,它似乎无法从Java中使用(这是有意义的,因为它是内联类).我试图使用Continuation协同程序的一些子类,但它们都是内部或私有的.
我知道通常建议将协程转换为CompletableFuture,但我在Android上,这意味着只有Java 7.Future另一方面,简单是太愚蠢,因为我不想定期检查函数是否完成 …
我有 Room 数据库接口,它是一个 Kotlin 文件,因为我不希望调用在主线程上运行,所以我使用 kotlin Suspend。我怎样才能使用java中的挂起函数
我有两种方法,我想插入一个User和另一个来检索用户
这些是我在 java 文件中遇到的错误
代码
Room Dao接口
用户道
@Dao
interface UserDao {
fun getAllUsersAsync(): CompletableFuture<List<User>> =
GlobalScope.future { getAllUsers() }
@Query("SELECT * FROM user")
suspend fun getAllUsers(): List<User>
@Insert
suspend fun insertUser(user: User): Long
}
Run Code Online (Sandbox Code Playgroud)
Java代码
private Long addUser(com.i6systems.in2plane.AppDatabase.User user) {
return userDao.insertUser(user);
}
private List<com.i6systems.in2plane.AppDatabase.User> getUsers () {
return userDao.getAllUsersAsync();
}
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助
谢谢R