gpt4 book ai didi

java 到 kotlin 类型不匹配

转载 作者:太空宇宙 更新时间:2023-11-04 09:41:35 25 4
gpt4 key购买 nike

我尝试将给定的 java(下面)代码转换为 Kotlin,但在某些时候卡住了,显示错误类型不匹配

这是我尝试转换为 kotlin 的 java 代码

public void insert(List<UserPreference> userPreferences,InsertCallback callback ){
ioExecutor.execute(()->
{
userPrefDao.insert(userPreferences);
callback.insertFinished();
});
}
 @Override
public void onSuccess(List<UserPreference> userPreferences) {

localCache.insert(userPreferences,()-> { lastRequestedPage++;
Log.d(TAG, "onSuccess: inserted");
isRequestInProgress = false;});


}

这是我发明的 kotlin 代码,但出现类型不匹配的错误

fun insert(userPreferences: List<UserPreference>, callback: InsertCallback) {
ioExecutor.execute({
userPrefDao.insert(userPreferences)
callback.insertFinished()
})
}
   override fun onSuccess(userPreferences: List<UserPreference>) {

localCache.insert(userPreferences, {
lastRequestedPage++
Log.d(TAG, "onSuccess: inserted")
isRequestInProgress = false
})


}
Type mismatch.
Required:
UserPrefLocalCache.InsertCallback
Found:
() → Unit

如何解决这个问题,请帮助我

最佳答案

Java 支持使用 lambda 表达式实例化函数式接口(interface)(具有一个非默认、非静态方法的接口(interface))。 Kotlin 没有这种关系。

您可以使用对象文字自行实例化接口(interface):

localCache.insert(userPreferences, object : InsertCallback {
override fun ...
})

或者,您直接使用 Kotlin 中的函数类型:

typealias InsertCallback = () -> Unit

localCache.insert(userPreferences) {
// lambda here
}

如果InsertCallback仍然是一个Java接口(interface),您可以使用SAM转换来实例化它。这不适用于 Kotlin 接口(interface)。

localCache.insert(userPreferences, InsertCallback {
// lambda here
})

关于java 到 kotlin 类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55919803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com